| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| base/ | 22-Oct-2025 | - | 2,246 | 1,740 | ||
| installer/ | 22-Oct-2025 | - | 2,241 | 1,507 | ||
| pack/ | 22-Oct-2025 | - | 874 | 558 | ||
| BUILD.gn | D | 22-Oct-2025 | 2.5 KiB | 83 | 77 | |
| README_zh.md | D | 22-Oct-2025 | 5.2 KiB | 87 | 62 | |
| hnp_main.c | D | 22-Oct-2025 | 3.7 KiB | 115 | 79 | |
| hnpcli_main.c | D | 22-Oct-2025 | 3.3 KiB | 105 | 70 |
README_zh.md
1# Native软件包开发指南 2## 1 简介 3 4大量生产力软件需要在设备上运行Native软件包(例如Python、node、java等Native软件包)。当前提供Native软件包方案支持在生产力应用上安装并运行Native软件包,支持开发者用户或者自动化测试人员运行通过命令行运行Native软件包二进制。 5 6## 2 Native软件包开发 7 8所有Native软件包都需要通过hnpcli工具打包成hnp(OpenHarmony Native Package)文件,通过hap打包工具将hnp包放入生产力应用中安装和运行,Native软件包以Hap形式进行分发使用。总共分为以下几步: 9 10* 将Native软件包源文件打包成hnp包。 11* 将hnp包打入hap包。 12* 签名hap包。 13 14### 2.1 使用命令行工具开发Native软件包 15 16#### 2.1.1 Native软件包打包成hnp包流程 17 18参考[Native软件打hnp包功能开发指导](https://gitee.com/openharmony/startup_appspawn/blob/master/service/hnp/pack/README_zh.md)将Native软件包文件打包成hnp包。 19 20#### 2.1.2 hnp包打入Hap包流程 21 22**操作步骤:** 231. 下载DevEco Studio软件,创建一个hap工程。 24 252. Hap工程根目录下新增hnp根目录,hnp根目录下根据设备的操作系统ABI名称(例如arm64-v8a)创建文件夹,文件目录格式如下: 26 27``` 28HAP工程根目录 29|__hnp #HAP包中新增hnp根目录 30|____arm64-v8a #(ABI) 31|______python.hnp 32|______sub_dir #支持子目录 33|________test.hnp 34``` 35 36hnp目录准备完成后,参考第4步在hap打包命令中用--hnp-path指定hnp根目录。 37 383. 修改hap工程根目录下entry/src/main/module.json5文件,配置hnp包信息,需要在"module"字段下增加以下字段。"package"字段指定hnp包在ABI文件夹下相对路径,"type"指定hnp包类型,包含公有("public")和私有("private")类型。点击DevEco Studio软件菜单栏中"Build"按钮下的"Build Hap(s)/APP(s)"按钮,点击"Build Hap(s)",编译Hap工程。 39 40``` 41"hnpPackages":[ 42 { 43 "package": "python.hnp", 44 "type": "public" 45 }, 46 { 47 "package": "sub_dir/test.hnp", 48 "type": "private" 49 } 50] 51``` 52 534. 参考[打包拆包工具使用说明](https://gitee.com/openharmony/developtools_packing_tool)中“hap包模式打包指令”章节。 545. 执行hap包模式打包指令获取未签名的hap包。 55 56**规格:** 57 581. 公有hnp包安装后应用进程沙箱路径为/data/service/hnp/xxx.org/xxx_yyy,私有hnp包安装后应用进程沙箱路径为/data/app/<bundleName>/xxx.org/xxx_yyy,其中xxx值hnp包hnp.json文件"name"字段,yyy值为hnp包中"version"字段。 592. 公有hnp包根路径的环境变量HNP_PUBLIC_HOME=/data/service/hnp,私有hnp包根路径的环境变量HNP_PRIVATE_HOME=/data/app。HNP_PRIVATE_HOME环境变量排序在HNP_PUBLIC_HOME前面,意味着如果存在同名二进制分别在公有hnp路径下和私有hnp路径下,优先执行私有hnp路径下二进制。 603. 公有hnp包可以被所有应用访问,私有hnp包只允许被安装该hnp包的hap应用访问。 614. 卸载hap应用会同步卸载该hap应用安装的所有hnp包,如果该hnp包中二进制正在被其他应用使用,则会导致hap应用卸载失败。 625. Hap应用A和B安装相同公有hnp包(hnp.json文件中"name"和"version"字段相同)。后安装的应用会跳过该hnp包的安装。仅当hap应用A和B都被卸载时,该公有hnp包会被卸载。 636. Hap应用A和B安装先后安装同名公有hnp包(hnp.json文件中"name"相同,但是"version"字段不同),则会尝试先卸载Hap应用A的hnp包,再安装Hap应用B的hnp包,如果Hap应用A的hnp包卸载失败会导致Hap应用B安装失败。 64 65#### 2.1.3 hap包签名流程 66 67**操作步骤:** 681. 参考[应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-0000001587684945-V5#section297715173233)中“手动签名”章节完成手动配置签名信息。 692. 下载[hap-sign-tool.jar](https://gitee.com/openharmony/developtools_hapsigner/blob/master/dist/hap-sign-tool.jar)文件。 703. 参考[应用包签名工具](https://gitee.com/openharmony/developtools_hapsigner/blob/master/README_ZH.md)中“使用说明”章节,使用命令签名hap包,命令中的参数来源于第一步中的签名配置信息。 714. 执行签名命令获取签名后的hap包。 72 73### 2.2 使用IDE工具开发Native软件包 74 75暂不支持,待开发。 76 77## 3 Native软件包的使用方法 78### 3.1 在hap应用中访问Native二进制 79以c++语言为例,可以在hap应用代码中通过system、execv等函数执行二进制。默认公有hnp包软链接路径为/data/service/hnp/bin,默认私有hnp包软链接路径为/data/app/bin,默认软链接路径已加入环境变量中。 80### 3.2 hdc shell执行方法 81 82**操作步骤:** 83 841. 从应用市场下载Native软件包hap应用并安装。 852. 通过数据线连接设备,执行hdc shell访问设备。 863. 公有hnp包安装后的物理路径为/data/app/el1/bundle/<userid>/hnppublic,私有hnp包安装后的物理路径为/data/app/el1/bundle/<userid>/hnp,userid默认为100。可以进入这些目录下找到安装的Native包文件目录,执行相关二进制。 87