• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..17-Mar-2025-

base/H17-Mar-2025-1,9641,529

installer/H17-Mar-2025-2,1181,420

pack/H17-Mar-2025-862549

BUILD.gnH A D17-Mar-20252.5 KiB8277

README_zh.mdH A D17-Mar-20255 KiB8361

hnp_main.cH A D17-Mar-20253.7 KiB11579

hnpcli_main.cH A D17-Mar-20253.3 KiB10570

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根目录,在hap打包命令中用--hnp-path指定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
363. 修改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工程。
37
38```
39"hnpPackages":[
40  {
41    "package": "python.hnp",
42    "type": "public"
43  },
44  {
45    "package": "sub_dir/test.hnp",
46    "type": "private"
47  }
48]
49```
50
514. 参考[打包拆包工具使用说明](https://gitee.com/openharmony/developtools_packing_tool)中“hap包模式打包指令”章节。
525. 执行hap包模式打包指令获取未签名的hap包。
53
54**规格:**
551. 公有hnp包安装后应用进程沙箱路径为/data/service/hnp/xxx.org/xxx_yyy,私有hnp包安装后应用进程沙箱路径为/data/app/bundleName/xxx.org/xxx_yyy,其中xxx值hnp包hnp.json文件"name"字段,yyy值为hnp包中"version"字段。
562. 公有hnp包根路径的环境变量HNP_PUBLIC_HOME=/data/service/hnp,私有hnp包根路径的环境变量HNP_PRIVATE_HOME=/data/app。HNP_PRIVATE_HOME环境变量排序在HNP_PUBLIC_HOME前面,意味着如果存在同名二进制分别在公有hnp路径下和私有hnp路径下,优先执行私有hnp路径下二进制。
573. 公有hnp包可以被所有应用访问,私有hnp包只允许被安装该hnp包的hap应用访问。
584. 卸载hap应用会同步卸载该hap应用安装的所有hnp包,如果该hnp包中二进制正在被其他应用使用,则会导致hap应用卸载失败。
595. Hap应用A和B安装相同公有hnp包(hnp.json文件中"name"和"version"字段相同)。后安装的应用会跳过该hnp包的安装。仅当hap应用A和B都被卸载时,该公有hnp包会被卸载。
606. Hap应用A和B安装先后安装同名公有hnp包(hnp.json文件中"name"相同,但是"version"字段不同),则会尝试先卸载Hap应用A的hnp包,再安装Hap应用B的hnp包,如果Hap应用A的hnp包卸载失败会导致Hap应用B安装失败。
61
62#### 2.1.3 hap包签名流程
63
64**操作步骤:**
651. 参考[应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-0000001587684945-V5#section297715173233)中“手动签名”章节完成手动配置签名信息。
662. 下载[hap-sign-tool.jar](https://gitee.com/openharmony/developtools_hapsigner/blob/master/dist/hap-sign-tool.jar)文件。
673. 参考[应用包签名工具](https://gitee.com/openharmony/developtools_hapsigner/blob/master/README_ZH.md)中“使用说明”章节,使用命令签名hap包,命令中的参数来源于第一步中的签名配置信息。
684. 执行签名命令获取签名后的hap包。
69
70### 2.2 使用IDE工具开发Native软件包
71
72暂不支持,待开发。
73
74## 3 Native软件包的使用方法
75### 3.1 在hap应用中访问Native二进制
76以c++语言为例,可以在hap应用代码中通过system、execv等函数执行二进制。默认公有hnp包软链接路径为/data/service/hnp/bin,默认私有hnp包软链接路径为/data/app/bin,默认软链接路径已加入环境变量中。
77### 3.2 hdc shell执行方法
78
79**操作步骤:**
801. 从应用市场下载Native软件包hap应用并安装。
812. 通过数据线连接设备,执行hdc shell访问设备。
823. 公有hnp包安装后的物理路径为/data/app/el1/bundle/userid/hnppublic,私有hnp包安装后的物理路径为/data/app/el1/bundle/userid/hnp。可以进入这些目录下找到安装的Native包文件目录,执行相关二进制。
83