应用间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导致开发者的应用安装失败。
最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
高清完整版请点击→《鸿蒙NEXT星河版开发学习文档》
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。
《鸿蒙 (OpenHarmony)开发学习视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
《鸿蒙开发基础》
《鸿蒙开发进阶》
《鸿蒙开发实战》
获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!