利用间 HSP 用于不同利用间的代码、资源共享。利用间 HSP 的宿主利用是一种非凡状态的利用,只能由一个 HSP 组成,不会独立运行在设施上,而是被一般利用模块的依赖项援用。当一般利用运行时,通过动静调用的形式应用利用间 HSP 提供的能力,从而实现利用本身所须要的性能。
注意事项
- 利用间 HSP 的代码会运行在开发者利用的过程中,调用相干代码时,须要做好异样捕捉与容错解决,避免因为利用间 HSP 性能异样导致的稳定性问题。
- 一个利用能够同时依赖多个利用间 HSP。
- 利用间 HSP 会影响开发者利用本身的启动工夫,依赖过多的利用间 HSP 可能会导致启动时延产生显著的劣化,倡议将依赖的数目管制在 16 个以内。
- 利用间 HSP 装置时须要对特权权限进行校验,如果想要开发利用间 HSP,须要配置 allowAppShareLibrary 利用特权,具体配置形式参考利用特权配置指南。
利用间 HSP 的应用
利用间 HSP 会分为两局部对外公布:
一部分为 HAR,HAR 包中不会蕴含具体的性能实现代码,而仅仅蕴含导出的对象与办法,所以体积很小。利用开发者将 HAR 包集成到本身的工程中,而后就能够通过调用 HAR 包中提供的对象与办法实现本身的利用性能。
另外一部分为 HSP,这部分为利用间 HSP 的具体实现,外面蕴含 js/ts 代码、C++ 库、资源和配置文件。这部分会上架到利用市场或者集成到零碎版本中。
集成利用间 HSP 的 HAR
HAR 中的 index.ets 文件是利用间 HSP 导出的申明文件的入口,所有须要导出的接口,对立在 index.ets 文件中定义。index.ets 文件门路如下:
liba
├── src
│ └── main
│ ├── ets
│ │ ├── pages
│ │ └── index.ets
│ ├── resources
│ └── module.json5
└── oh-package.json5
对外裸露的接口,须要在入口文件 index.ets 中申明:
index.ets 内容样例如下:
// liba/src/main/ets/index.ets
export {hello, foo1, foo2, nativeMulti, UIComponent} from './ui/MyUIComponent'
其中 UIComponent 为导出的 ArkUI 组件,hello()、foo1()与 foo2()为利用间 HSP 导出的 ts 办法,nativeMulti()办法为利用间 HSP 导出的 native 办法。具体实现如下:
ArkUI 组件
在 HSP 中 ArkUI 组件的具体实现样例:
// liba/src/main/ets/ui/MyUIComponent.ets
@Component
export struct UIComponent {
@State message: string = 'Hello World'
build() {Column() {Text(this.message)
.fontSize(32)
.padding(8)
.fontColor(0xffffff)
.backgroundColor(0x0000ff)
}.padding(8).width('100%')
}
}
ts 办法
在 HSP 中 ts 办法的具体实现:
// liba/src/main/ets/ui/MyUIComponent.ets
export function hello(name: string): string {return "hello +" + name;}
export function foo1() {return "foo1";}
export function foo2() {return "foo2";}
native 办法
在 HSP 中也能够蕴含 C++ 编写的 so。对于 so 中的 native 办法,HSP 通过间接的形式导出,以导出 libnative.so 的乘法接口 multi 为例:
// liba/src/main/ets/ui/MyUIComponent.ets
import native from "libnative.so"
export function nativeMulti(a: number, b: number) {let result: number = native.multi(a, b);
return result;
}
应用 HAR 导出的能力
援用 HAR 前,须要先配置对 HAR 的依赖,配置形式可参考文档。HAR 配置胜利后,在配置模块的 module.json5 中会生成相干依赖项信息,如下所示:
"dependencies": [
{
"bundleName": "com.share.liba",
"moduleName": "liba",
"versionCode": 10001
}
]
其中 bundleName 为利用间 HSP 的 bundle 名称,moduleName 为利用间 HSP 的模块名称,versionCode 为利用间 HSP 的版本号。
应用 HAR 中的 ArkUI 组件
HAR 的依赖配置胜利后,能够援用 HAR 的 ArkUI 组件。ArkUI 组件的导入形式与 ts 的导入形式统一,通过 import 引入 HAR 导出的 ArkUI 组件,示例如下所示:
import {UIComponent} from 'liba'
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {Row() {
// 援用 HAR 的 ArkUI 组件
UIComponent()
Column() {Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
应用 HAR 中的 ts 办法
通过 import 援用 HAR 导出的 ts 类和办法,示例如下所示:
import {foo1} from 'liba'
import {foo2} from 'liba'
@Component
struct Index {build() {Row() {Column() {Button('Button')
.onClick(()=>{
// 援用 HAR 的 ts 办法
foo1();
foo2();})
}
.width('100%')
}
.height('100%')
}
}
应用 HAR 中的 native 办法
通过 import 援用 HAR 导出的 native 办法,示例如下所示:
import {nativeMulti} from ‘liba’
@Component
struct Index {
build() {
Row() {Column() {Button('Button')
.onClick(()=>{
// 援用 HAR 的 native 办法
nativeMulti();})
}
.width('100%')
}
.height('100%')
}
}
利用间 HSP 的散发形式(仅对系统利用凋谢)
利用间 HSP 因为并未间接残缺的集成到开发者利用中去,所以须要提前预置在零碎版本中或者随开发者利用同步装置到设施上,次要有以下两种模式:
- 随零碎公布,局部罕用利用间 HSP 会预置在零碎版本中。
- 随利用公布,即用户在利用市场下载利用时,如果利用依赖了一个或者多个利用间 HSP,同时设施上没有装置这个其依赖的利用间 HSP 时,利用市场会为用户同时下载一般利用以及其依赖的利用间 HSP。从而保障一般利用可能失常应用共享库的性能。
利用间 HSP 的调试形式
开发者本地调试利用间 HSP 相干的性能时,可能并不具备上述散发的条件,此时能够通过 bm 相干指令本地实现利用间 HSP 的散发,次要步骤如下:
- 获取到利用间 HSP 的安装包。
- 通过 bm 指令先装置利用间 HSP 的安装包。
bm install -s sharebundle.hsp
- 通过 bm 指令后装置开发者本身的利用 hap。
bm install -p feature.hap
- 启动开发者本身的利用,调试相干性能。
留神:步骤 2 和步骤 3 不能够颠倒,否则会因为短少必要的利用间 HSP 导致开发者的利用装置失败。更多 bm 相干指令能够参考文档。