| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 14 天前 | ||
| 1 年前 | ||
| 1 天前 | ||
| 6 个月前 | ||
| 17 天前 | ||
| 2 年前 |
Native软件包开发指南
1 简介
大量生产力软件需要在设备上运行Native软件包(例如Python、node、java等Native软件包)。当前提供Native软件包方案支持在生产力应用上安装并运行Native软件包,支持开发者用户或者自动化测试人员运行通过命令行运行Native软件包二进制。
2 Native软件包开发
所有Native软件包都需要通过hnpcli工具打包成hnp(OpenHarmony Native Package)文件,通过hap打包工具将hnp包放入生产力应用中安装和运行,Native软件包以Hap形式进行分发使用。总共分为以下几步:
- 将Native软件包源文件打包成hnp包。
- 将hnp包打入hap包。
- 签名hap包。
2.1 使用命令行工具开发Native软件包
2.1.1 Native软件包打包成hnp包流程
参考Native软件打hnp包功能开发指导将Native软件包文件打包成hnp包。
2.1.2 hnp包打入Hap包流程
操作步骤:
-
下载DevEco Studio软件,创建一个hap工程。
-
Hap工程根目录下新增hnp根目录,hnp根目录下根据设备的操作系统ABI名称(例如arm64-v8a)创建文件夹,文件目录格式如下:
HAP工程根目录
|__hnp #HAP包中新增hnp根目录
|____arm64-v8a #(ABI)
|______python.hnp
|______sub_dir #支持子目录
|________test.hnp
hnp目录准备完成后,参考第4步在hap打包命令中用--hnp-path指定hnp根目录。
- 修改hap工程根目录下entry/src/main/module.json5文件,配置hnp包信息,需要在"module"字段下增加以下字段。"package"字段指定hnp包在ABI文件夹下相对路径,"type"指定hnp包类型,包含公有("public")和私有("private")类型,"independentSign"为可选参数,默认值为false,用于指定是否为独立签名hnp包。点击DevEco Studio软件菜单栏中"Build"按钮下的"Build Hap(s)/APP(s)"按钮,点击"Build Hap(s)",编译Hap工程。
"hnpPackages":[
{
"package": "python.hnp",
"type": "public",
"independentSign": true
},
{
"package": "sub_dir/test.hnp",
"type": "private",
"independentSign": false
}
]
- 参考打包拆包工具使用说明中“hap包模式打包指令”章节。
- 执行hap包模式打包指令获取未签名的hap包。
规格:
- 公有hnp包安装后应用进程沙箱路径为/data/service/hnp/xxx.org/xxx_yyy,私有hnp包安装后应用进程沙箱路径为/data/app//xxx.org/xxx_yyy,其中xxx值hnp包hnp.json文件"name"字段,yyy值为hnp包中"version"字段。
- 公有hnp包根路径的环境变量HNP_PUBLIC_HOME=/data/service/hnp,私有hnp包根路径的环境变量HNP_PRIVATE_HOME=/data/app。HNP_PRIVATE_HOME环境变量排序在HNP_PUBLIC_HOME前面,意味着如果存在同名二进制分别在公有hnp路径下和私有hnp路径下,优先执行私有hnp路径下二进制。
- 公有hnp包可以被所有应用访问,私有hnp包只允许被安装该hnp包的hap应用访问。
- 卸载hap应用会同步卸载该hap应用安装的所有hnp包,如果该hnp包中二进制正在被其他应用使用,则会导致hap应用卸载失败。
- Hap应用A和B安装先后安装同名公有hnp包(hnp.json文件中"name")。后安装的应用B会无法安装,需要卸载hap应用A或者将应用B中的公有hnp修改为私有hnp方可继续安装。
2.1.3 hap包签名流程
操作步骤:
- 参考应用/服务签名中“手动签名”章节完成手动配置签名信息。
- 下载hap-sign-tool.jar文件。
- 参考应用包签名工具中“使用说明”章节,使用命令签名hap包,命令中的参数来源于第一步中的签名配置信息。
- 执行签名命令获取签名后的hap包。
2.2 使用IDE工具开发Native软件包
暂不支持,待开发。
3 Native软件包的使用方法
3.1 在hap应用中访问Native二进制
以c++语言为例,可以在hap应用代码中通过execv、execve等函数执行二进制。默认公有hnp包软链接路径为/data/service/hnp/bin,默认软链接路径已加入环境变量中。私有hnp请使用实际路径:/data/app/xxx.org/xxx_yyy/{二进制文件在hnp包中的相对路径如:bin/hnpsample},其中xxx对应hnp.json中“name”,yyy对应hnp.json中“version”。示例代码如下:
pid_t child = fork();
if (child < 0) {
OH_LOG_ERROR(LOG_APP, "fork for child process failed %d", errno);
return;
}
if (child == 0) {
// do execv
int ret = execv("/data/app/test.org/test_1.1/bin/testBin", NULL);
OH_LOG_ERROR(LOG_APP, "execv failed errno %d", errno);
exit(errno);
} else {
int status;
if (waitpid(child, &status, 0) == -1) {
OH_LOG_ERROR(LOG_APP, "waitpid failed errno %d", errno);
return;
}
// process child exit
...
}
3.2 hdc shell执行方法
操作步骤:
- 从应用市场下载Native软件包hap应用并安装。
- 通过数据线连接设备,执行hdc shell访问设备。
- 公有hnp包安装后的物理路径为/data/app/el1/bundle//hnppublic,私有hnp包安装后的物理路径为/data/app/el1/bundle//hnp,userid默认为100。可以进入这些目录下找到安装的Native包文件目录,执行相关二进制。