【HarmonyOS NEXT】如何实现同一个包提供给不同的业务App使用

【关键字】

API 11 / HSP / 发布 / 闭源 / 路由 / RouterMode / pushNamedRoute

【问题描述】

问题1

需要开发公共基础组件提供给内部其他业务App使用,因此需要编译成闭源的静态库或动态库交付。一开始选择的是静态共享包(har),但是发现har包无法注册页面,即module.json5中不能包含pages字段,否则编译报错。详细报错如下:

```
> hvigor ERROR: Schema validate failed.
Detail: Please check the following fields.
{
instancePath: 'module',
keyword: 'enum',
params: {
allowedValues: [
'name', 'type',
'srcEntrance', 'srcEntry',
'description', 'process',
'mainElement', 'deviceTypes',
'installationFree', 'virtualMachine',
'uiSyntax', 'metadata',
'abilities', 'extensionAbilities',
'requestPermissions', 'definePermissions',
'testRunner', 'dependencies',
'libIsolation'
]
},
message: 'must be equal to one of the allowed values',
location: '/path/to/staticlibrary/src/main/module.json5:2:14'
}
```

为了注册页面,只能改用动态共享包(HSP),但是发现HSP包编译后会把包名打进去,如果App的包名与HSP包的包名不匹配的话,App启动会崩溃。

```
Reason:ReferenceError
Error name:ReferenceError
Error message:Load file with filename '/data/storage/el1/bundle/com.xxx.yyy/AAA/AAA/ets/modules.abc' failed, recordName 'com.xxx.yyy/AAA/Index'
```

所以要如何实现同一个包提供给不同的业务App使用呢?

问题2:

命名路由必须在跳转的页面中引入命名路由的页面,这样会造成组件间的耦合。那么HSP包必须绑定包名使用吗?

问题3:

命名路由的pushNamedRoute方法是否有RouterMode入参?

【解决方案】

1、HAR不支持在配置文件中声明pages页面,但是可以包含pages页面,并通过命名路由的方式进行跳转。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/har-package-0000001774279570

2、HSP不支持独立发布,而是跟随其宿主应用的APP包一起发布,与宿主应用同进程,具有相同的包名和生命周期。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/in-app-hsp-0000001774119898

3、命名路由的pushNamedRoute方法同样有RouterMode入参,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-router-0000001820880773#ZH-CN_TOPIC_0000001820880773__routerpushnamedroute10-2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值