
#HarmonyOS NEXT体验官#ArkUI-X支持动态化探索 原创
ArkUI-X支持动态化探索
ArkUI-X支持动态化,使用者可以根据自己需要动态发布跨平台内容,从而使跨平台部分和宿主应用进行解耦。动态化能力支持如下两个典型场景:
-
框架动态化:指ArkUI跨平台开发框架本身可以做到动态下发,即应用发布时可以不带框架基础库,降低应用原始发布包体积,在需要时才从云端动态下发和执行加载;
-
特性动态化:指用ArkTS语言开发的特性可以做到动态化,和宿主应用解耦,独立发布、升级版本;
说明:应用在使用动态化能力时需要遵循目标终端操作系统应用上架规则,如果违规可能有下架风险,风险由各自应用承担。
这里我们以安卓为例,给大家举例说明,首先在开始之前,我们一起来看一下它的适用场景。
适用场景
动态化主要包括两个典型场景:
- 场景1:框架动态化,为了降低应用ROM体积占用,及满足动态升级框架目的;
- 场景2:特性Bundle动态化,特性和宿主应用发布解耦;
了解完以后,我们就可以进入到开发的步骤。
开发指南
这里面的开发,我们从三个维度去考虑,
- 目录结构
- 加载优先级
- 框架初始化
接下来我们进入正题。
目录说明
应用沙箱内目录架构
动态加载时要求应用沙箱内目录架构如下所示:
-
/data/data/应用/files/arkui-x
可以视为ArkUI-X动态加载的沙箱根目录,框架和特性Bundle均需要放在这个目录下; -
根目录下的libs文件夹放置引擎(libarkui_android.so),及其他公共库;
-
根目录下要求按照module级别组织,不可以重名;
为了帮助大家理解,我觉得我有必要把ArkUI-X应用工程目录结构也给大家提醒一下。
ArkUI-X应用工程目录结构
以及Android的应用目录结构
Android应用目录结构
通过上面的目录结构,不知道大家能不能理解。
最后给大家说一下这里面的应用加载的优先级,以及框架初始化的流程。
加载优先级
-
引擎so库:优先加载应用lib目录下,如果未找到则去应用沙箱根目录加载;
-
插件so库:优先加载应用lib目录下,如果未找到则去应用沙箱根目录尝试加载,最后去插件自身的libs目录加载;
-
module加载:优先从应用assets目录下寻找,如果找不到则去沙箱内尝试加载;
-
systemres加载:同上,优先加载应用assets目录,找不到则去沙箱内加载;
注意:不建议应用同一个module,即预制到应用assets内又在沙箱同时部署。
框架初始化
如果应用使用了框架引擎动态化,首次下载引擎库后将其放置/data/data/应用/files/arkui-x/libs/arm64-v8a
目录,之后再打开对应跨平台界面时初始化框架:
后续再打开应用,建议按照正常流程在Application里初始化框架,提前完全引擎库加载,提高跨平台模块加载速度;
到这里,大家是不是就已经知道啦。
最后我们就可以通过IDE,去开发啦。
最后来看一下我用动态化,开发的应用demo吧。
