简单聊聊 Flutter 在鸿蒙上为什么可以 hotload ?

众所周知, Flutter 最大的特色之一就是 Debug 过程中支持 hotload ,不错的 hotload 体验对于开发效率十分重要,而在此之前,我们在 《Flutter 又双叒叕可以在 iOS 26 的真机上 hotload》 聊过了 Flutter 和 iOS 在 hotload 上的爱恨情仇,那么在鸿蒙上,为什么 Flutter 也可以支持 hotload ?

首先我们知道 Flutter 在 Debug 下是 JIT 执行,也就是实际上 Dart 实际上并不是解释执行,而是即时编译的过程,而 hotload 也是基于 JIT 实现,所以很明显 Flutter 在鸿蒙上也是需要 RWX(可读写可执行) 类型的内存支持。

但是代操作系统都有 W^X (Write XOR Execute,即“写入”和“执行”互斥) 特性,基于安全考虑,原则上**一块内存区域,不能同时拥有“可写”(W)和“可执行”(X)两种权限,**并且鸿蒙内核从安全考虑,也会限制普通应用动态申请可执行内存的权限。

那基于这个前提, Flutter 是如何在鸿蒙上实现的 hotload ? 这里就不得不提 prctl :

Linux 中的 prctl() 系统调用是一个多功能的接口,允许进程或线程控制其自身的各种行为方面,而鸿蒙 Next 集成了 POSIX 兼容层等支持,所以能兼容 Linux 调用很正常,但是这些都不是重点,重点是这是一个非标 prctl 操作

prctl(0x6a6974,...) 属于是鸿蒙内核的定制信号,实际上这里的 0x6a6974 正是对应 “jit” 这个词的 ASCII 码:

  • 6a = j
  • 69 = i
  • 74 = t

也就是实际上鸿蒙上是通过 prctl() 来控制在 Debug 时的 JIT 支持,而根据上述设置,可以猜测,在鸿蒙平台上,在 Debug 下可以通过 prctl() 可以临时申请可执行地址,并且只在非上架的签名有效:

而在 openHarmony 的相关源码里,我们可以看到不少地方都是通过 0x6a6974 来实现 JIT 执行的支持,这其实也算是鸿蒙为自身的 Hotload 留的一个后门:

大胆猜测 DevEco Studio 下的热重载也是类似的途径,所以如果你在鸿蒙平台有 Debug JIT 或者 hotload 的需求,这或者是一个可行的方式。

参考资料

  • https://gitcode.com/openharmony-tpc/flutter_engine/blob/oh-3.27.4-dev/DEPS_ohos

  • https://gitcode.com/openharmony-sig/fluttertpc_dart_sdk/blob/flutter_3.27.4_deps/runtime/bin/virtual_memory_posix.cc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/910703.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习原理与Pytorch实战

深度学习原理与Pytorch实战 第2版 强化学习人工智能神经网络书籍 python动手学深度学习框架书 TransformerBERT图神经网络: 技术讲解 编辑推荐 1.基于PyTorch新版本,涵盖深度学习基础知识和前沿技术,由浅入深,通俗易懂&#xf…

发布/订阅模式:解耦系统的强大设计模式

Hi,我是布兰妮甜 !发布/订阅模式(Publish/Subscribe Pattern,简称 Pub/Sub)是一种消息传递模式,它允许发送者(发布者)将消息发送给多个接收者(订阅者)&#x…

前端开发面试题总结-原生小程序部分

文章目录 1、wxss和css的区别?2、原生小程序组件使用过哪些?3、原生小程序中如何绑定事件?4、原生小程序中如何修改数据并同步视图?5、原生小程序中如何进行事件传参?6、小程序中发起网络请求7、 导航跳转方式?8、 监听上拉触底和下拉刷新?9、 小程序的生命周期函数?10…

WPS会员享受权益集锦

也许你经常使用WPS,但可能不了解究竟有哪些功能只有会员才能享受呢,作为一个经常使用WPS会员办公的老师,我今天就给你分类理一理:我把WPS会员功能进行分类整理,按功能属性划分为以下六大类: 一、云存储与管…

某只股票量化对冲策略计算绘图

量化对冲策略计算绘图 代码提要 代码运行环境,WIN 11 ,python 3.13 使用akshare获取股票数据,并用pandas的ewm函数添加了akshare库获取真实股票数据主程序中使用ak.stock_zh_index_daily获取上证指数数据增加了异常处理,当获取…

JavaEE初阶第五期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(三)

专栏:JavaEE初阶起飞计划 个人主页:手握风云 目录 一、线程的状态 1.1. 观察所有线程的状态 1.2. 观察线程的状态和转移 1.3. 线程状态和状态转移的意义 二、线程安全 2.1. 观察线程不安全 2.2. 线程安全的概念 2.3. 线程不安全的原因 一、线程的…

Python爬虫实战:研究xmltodict库相关技术

1. 引言 1.1 研究背景与意义 气象数据在农业生产、交通规划、灾害预警等多个领域具有重要应用价值。传统的气象数据获取方式主要依赖于气象部门发布的统计信息,存在更新不及时、数据维度有限等问题。随着互联网技术的发展,气象网站提供了丰富的实时气象数据,但这些数据通常…

暴力风扇方案介绍

炎炎夏日,当普通风扇只能送来 “温柔拂面”,暴力风扇却能吹出 “台风级” 清凉!想知道这些 “风力狂魔” 是如何炼成的?答案藏在电机、电路和芯片的黄金三角组合里。​ 一、电机:暴力风扇的 “心脏起搏器”​ 暴力风扇…