OpenHarmony—应用间HSP开发指导
注意事项
1. 应用间HSP的代码会运行在开发者应用的进程中,调用相关代码时,需要做好异常捕获与容错处理,防止由于应用间HSP功能异常导致的稳定性问题。
2. 一个应用可以同时依赖多个应用间HSP。
3. 应用间HSP会影响开发者应用自身的启动时间,依赖过多的应用间HSP可能会导致启动时延发生明显的劣化,建议将依赖的数目控制在16个以内。
4. 应用间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由于并未直接完整的集成到开发者应用中去,所以需要提前预置在系统版本中或者随开发者应用同步安装到设备上,主要有以下两种形式:
1. 随系统发布,部分常用应用间HSP会预置在系统版本中。
2. 随应用发布,即用户在应用市场下载应用时,如果应用依赖了一个或者多个应用间HSP,同时设备上没有安装这个其依赖的应用间HSP时,应用市场会为用户同时下载普通应用以及其依赖的应用间HSP。从而保证普通应用能够正常使用共享库的功能。
应用间HSP的调试方式
开发者本地调试应用间HSP相关的功能时,可能并不具备上述分发的条件,此时可以通过bm相关指令本地完成应用间HSP的分发,主要步骤如下:
1. 获取到应用间HSP的安装包。
2. 通过bm指令先安装应用间HSP的安装包。
bm install -s sharebundle.hsp
3. 通过bm指令后安装开发者自身的应用hap。
bm install -p feature.hap
4. 启动开发者自身的应用,调试相关功能。
注意:步骤2和步骤3不可以颠倒,否则会由于缺少必要的应用间HSP导致开发者的应用安装失败。更多bm相关指令可以参考文档。
OpenHarmony—应用间HSP开发指导的更多相关文章
- 乘风破浪,Windows11设计和开发指导,全新图标字体和云母材质
Windows11全新的布局设计 Windows 11全新的布局设计已设计为支持现代应用体验.渐进的圆角.嵌套元素和一致的排水沟相结合,营造出柔和.平静.平易近人的效果,强调目的的统一和易用性. ht ...
- QtQuick桌面应用程序开发指导 3)达到UI而功能_B 4)动态管理Note物_A
3.2 把Page Item和Marker Item绑定 之前我们实现了PagePanel组件, 使用了三个state来切换Page组件的opacity属性; 这一步我们会使用Marker和Marke ...
- DHTMLX Tree中文开发指导
专业版1.6下载地址(CSDN) http://download.csdn.net/source/1388340 版本号:dhtmlxTree v.1.6 Professional edition b ...
- QtQuick桌面应用开发指导 1)关于教程 2)原型和设计 3)实现UI和功能_A
Release1.0 http://qt-project.org/wiki/developer-guides Qt Quick Application Developer Guide for Desk ...
- 如何进行Hadoop二次开发指导视频下载
本视频适合对Java有一定了解,熟悉java se的Hadoop爱好者,想对Hadoop进行二次开发.下面是以伪分布为例: 想对Hadoop二次开发:一.首先需要Hadoop和Java之间搭建Ecli ...
- IT增值服务-客户案例(三):合肥薪火科技,Java和P2P网络借贷系统开发指导
客户整体情况: 合肥薪火科技,是安徽合肥一家主营微信开发和运营的中小企业,http://weimarket.cn/. 这家公司筹备.创立.曲折创业的经历,我一直有关注.因为2个老板,都是我的同学校友, ...
- IT增值服务客户案例(二):河南郑州大四实习生,职业规划和项目开发指导
客户整体情况,河南郑州大四在校学生,目前在企业实习,从事Java开发工作.有一定的项目开发经验,对Java周边技术有基本的理解. 客户购买的是"拜师学艺"服务,按月付款. 经过多次 ...
- 漫谈LiteOS-Huawei_IoT_Link_SDK_OTA 开发指导
1概述 在应用升级过程中,无线下载更新(OTA)是一种常用,且方便的升级方式.Liteos采用的OTA升级方案基于LwM2M协议,实现了固件升级(FOTA)和软件升级(SOTA)两种升级方案.用户可根 ...
- Django新手十个开发指导
下面是关于Django新手开发中的一些建议,大家可以参考一下~~ 1,不要将项目名称包含在引用代码里 比如你创建了一个名为"project"的项目,包含一个名为"app& ...
- Jetty开发指导:框架
Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...
随机推荐
- 通过paramiko模块操作服务器
用于帮助开发者通过代码远程连接服务器,并对服务器进行操作. 如果下面运行错误了,可以看我另外一篇文章有解决办法解决paramiko连接远程服务器错误 pip3 install paramiko imp ...
- git commit 不生成 changeId 解决方案
1). 检查仓储 .git/hook 下面是否有 commit-msg 文件,如果没有可以到下面的地址下载,或者把其他同事的 commit-msg 文件拷贝到你的 .git/hook 重新commit ...
- 【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
问题描述 在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exis ...
- 【简历模板】极简Markdown程序员简历模板
前言 最近在找工作,一份好的简历是敲门砖,所以跟大家分享下简洁明了大方MarkDown的简历模板和在线编辑工具 在线工具 冷熊 Java工程师简历模板 下载 点击下载 预览 个人信息 xxx/男/19 ...
- 通过 TCPView KPKIService.exe 删掉 (原来是单点登录的中间件)
叫 统一安全中间件,就是个第三方做的key的安全检查,谁知道是哪年装的 (原来是单点登录的中间件) 资料 https://baijiahao.baidu.com/s?id=17173842191483 ...
- 英语字母z解析.drawio
英语字母z解析.drawio
- K8S容器环境下资源限制与jvm内存回收
一.k8s中的java资源限制与可能的问题 与以前单机跑单服务的情况相比,在k8s.docker容器化环境下的宿主机内存.cpu相对更大,所以当运行java类程序的时候,就必然有必要对容器进行内存限制 ...
- Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR
原文:Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR - S ...
- Vue 长文本组件(有展开更多按钮)实现 附源码及使用
原文地址:Vue 长文本组件(有展开更多按钮) | Stars-One的杂货小窝 最近项目需要优化长文本的显示,如果长文本过长,固定显示几行并显示一个展开更多的按钮,点击按钮即可把隐藏的文本显示出来 ...
- PBKDF2算法:保障密码安全的利器
PBKDF2算法起源: PBKDF2(Password-Based Key Derivation Function 2)算法是一种基于密码的密钥派生函数,最初由RSA实验室的密码学家提出,用于从密码中 ...