当前位置: 首页 > news >正文

简单聊聊 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.lqws.cn/news/590365.html

相关文章:

  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!
  • 具身多模态大模型在感知与交互方面的综述
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • rocketmq 之 阿里云转本地部署实践总结
  • Vue3 中 Excel 导出的性能优化与实战指南
  • 创建和连接Vue应用程序实例
  • 缓存系统-淘汰策略
  • 强化学习系列--dpo损失函数
  • 齿轮的齿厚极限偏差如何确定?一起学习一下
  • C++基础
  • 目前最火的agent方向-A2A快速实战构建(二): AutoGen模型集成指南:从OpenAI到本地部署的全场景LLM解决方案
  • 《Python 架构之美:三大设计模式实战指南》
  • 【FR801xH】富芮坤FR801xH之UART
  • 【javaAI】SpringAI快速入门
  • 【C#】如果有一个数值如 168.0000100,如何去除末尾的无效零,只显示有效的小数位数,让DeepSeek给我们解答
  • 半加器和全加器
  • Disruptor架构哲学
  • 【机器学习2】正则化regularizaiton(降低模型过拟合)
  • 设备管理的11个指标、七大误区、六大特征
  • muduo
  • 数据结构——线性表的链式存储
  • QT笔记---环境和编译出现的问题
  • Golang的代码结构设计原则与实践与模式应用
  • helm安装配置jenkins
  • 百度轮岗:任命新CFO,崔珊珊退居业务二线
  • Redis-7.4.3-Windows-x64下载安装使用
  • 时空数据挖掘五大革新方向详解篇!
  • 我认知的AI宇宙系列第三期
  • 强化学习概述及学习流程
  • 3D词云图