一、场景说明
- P 提供 interface/abstract class 定义 A
- B1/B2/B3 实现 A 的定义,并提供产物
- P 集成 B1/B2/B3 根据需要加载对应的实现,统一接口,代码逻辑统一
二、目标
- B* 产物不用携带 A,避免代码重复、冲突
- P 可以在不改变定义(或不影响B*继承/编译)的情况下,可以随意修改,最终效果以 P 最终运行时集成的 A+ 为准
三、原 Android 实现
- P 提供 aar/jar A
- B* compileOnly 依赖 A,产物 aar/jar
- P 同时 implement A + B*
四、鸿蒙实现方法
- P 新建 Hsp module,编译产出 A (hsp + tgz)
- B* devDependencies 依赖 A(tgz),产出 har
- P 使用方的 hap(Entry)dependencies 直接依赖 A(tgz) + B*(har)
json
{
"name": "***",
"version": "1.0.0",
"dependencies": {
'@testgroup1/hsp_package': 'file:.. tgz 路径/module路径/版本号',
"@testgroup2/har_package": "file:.. har 路径/版本号",
}
}
- P Entry 配置 hsp 动态加载
json
{
"apiType": "stageMode",
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
// 新增这里
"runtimeOnly": {
"packages": [
"@testgroup1/hsp_package",
"@testgroup2/har_package",
]
}
}
},
]
}
- 运行即可成功
五、提供产物测试
-
在没有 hsp 时,直接提供 har 包,测试人员即可 hdc install *.hap 成功
-
存在 hsp 时,直接 hdc install *.hap 报错
Failed to install the HAP or HSP because the dependent module does not exist. entry's dependent module: * does not exist
-
解决办法:
- DevEcoStudio 运行可以成功,查看他在运行时的命令

- 那我们只要照着做,用同样的命令,即可成功安装运行
- 也可以写一个 bat/shell 脚本,可以更快捷方便
- DevEcoStudio 运行可以成功,查看他在运行时的命令
六、发布
没有任何变化,APP 包中会包含 hap+hsp 包同时上传到 AGC 服务器。
有任何问题评论 or 留言交流