A
Air官方
应用什么时候需要可执行内存?脚本引擎、JIT 编译器、动态生成代码的框架都要。鸿蒙对这类需求有一套专门机制:权限段声明。这篇讲清楚它的原理与实践。
▍为什么普通申请不行
现代操作系统的安全基线是数据页不可执行:malloc 出来的内存没有执行权限,跳过去执行立即崩溃。JIT 引擎需要生成机器码并执行,就必须申请可写可执行内存。移动平台对此普遍收紧——直接裸申请会被拒绝或有条件放行。鸿蒙的正式通道是在应用的权限声明里带可执行内存权限(业界通称 JIT 权限),经审核放行。
▍声明与使用
工程侧:权限声明进配置,打包流程里有专门的段注入步骤把权限声明写进包的元数据。注入动作本身会触碰包内 ELF 与清单,所以要遵循加工后验证的老规矩:注入后重验对齐与完整性、装机实测加载。运行时侧:申请可执行内存用受控接口,分配、写入、切换权限的序列按平台文档来,别沿用桌面的粗暴做法(整页可写可执行常驻)。
▍验证的陷阱
有个反直觉的经验:用探针去测试可执行内存是否可用,探针返回不可用不代表能力真不可用——受控上下文里探针可能被特殊处理给假阴性。真实工程的翻案案例:某引擎的 JIT 探针报阴性,团队差点放弃引擎直跑方案,最后用真实引擎直接运行验证成功。结论:能力判定必须用真实工作负载,探针结论只能参考。
▍没有权限时的降级
申请不下来或机型不放行时的降级链:解释执行(慢但通)、AOT 预编译(把生成步骤挪到构建期)、拒绝启用该功能模块。设计时就该有这条降级链,别让 JIT 成为唯一的路。
▍合规提醒
可执行内存权限的市场审核比普通权限严:要在审核材料里说清楚用途(哪个引擎、什么功能)。用途说不清会被驳回,Air 工程的申请经验是附上技术说明而非只勾选框。
▍一句话
要 JIT,走权限声明正道;验证用真引擎;设计带降级。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍为什么普通申请不行
现代操作系统的安全基线是数据页不可执行:malloc 出来的内存没有执行权限,跳过去执行立即崩溃。JIT 引擎需要生成机器码并执行,就必须申请可写可执行内存。移动平台对此普遍收紧——直接裸申请会被拒绝或有条件放行。鸿蒙的正式通道是在应用的权限声明里带可执行内存权限(业界通称 JIT 权限),经审核放行。
▍声明与使用
工程侧:权限声明进配置,打包流程里有专门的段注入步骤把权限声明写进包的元数据。注入动作本身会触碰包内 ELF 与清单,所以要遵循加工后验证的老规矩:注入后重验对齐与完整性、装机实测加载。运行时侧:申请可执行内存用受控接口,分配、写入、切换权限的序列按平台文档来,别沿用桌面的粗暴做法(整页可写可执行常驻)。
▍验证的陷阱
有个反直觉的经验:用探针去测试可执行内存是否可用,探针返回不可用不代表能力真不可用——受控上下文里探针可能被特殊处理给假阴性。真实工程的翻案案例:某引擎的 JIT 探针报阴性,团队差点放弃引擎直跑方案,最后用真实引擎直接运行验证成功。结论:能力判定必须用真实工作负载,探针结论只能参考。
▍没有权限时的降级
申请不下来或机型不放行时的降级链:解释执行(慢但通)、AOT 预编译(把生成步骤挪到构建期)、拒绝启用该功能模块。设计时就该有这条降级链,别让 JIT 成为唯一的路。
▍合规提醒
可执行内存权限的市场审核比普通权限严:要在审核材料里说清楚用途(哪个引擎、什么功能)。用途说不清会被驳回,Air 工程的申请经验是附上技术说明而非只勾选框。
▍一句话
要 JIT,走权限声明正道;验证用真引擎;设计带降级。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前