1.背景:
因为需求原因需要在使用本地ai模型,需要将服务端的代码打包成一个二进制,然后放在客户端,调用成一个服务,供客户端和h5通http的方式进行调用,因为鸿蒙端不支持在本地开启一个单个进程,所以采用了ndk方式在C端即C++端使用fork() 去开辟一个子进程,然后通过execve()方式将二进制成的hnp调用起来,因为使用hnp包打成的hap包只能在电脑端安装(咨询鸿蒙端,那边提示,目前hnp在手机和pad上没有使用场景,所以无安装)基于这些,采用了将鸿蒙的电脑端打成的hap包和手机/pad端打成的hap包,都放到app包中:
- 先打成hnp包:a:先在同一个文件夹下创建下面三个文件夹,然后将后端给的二进制放到bin文件夹下(注意:命名是:aipcserverharmony,因为在C++中调用服务的时候需要根据这个命名去找到二进制文件调用)
image.png
打包hnp的命令行:这个是我打包的命令行
hnpcli pack -i /Users/edy/Desktop/dddd/aipcserverharmony -o /Users/edy/Desktop/dddd/out -n aipcserverharmony -v 1.0
hnpcli 工具位置:在安装的sdk目录toolchains目录下
image.png
hnp打包的官网地址:https://gitee.com/openharmony/startup_appspawn/blob/master/service/hnp/README_zh.md
2.在项目的根目录下创建一个hnp包,并且在包中创建一个arm64-v8a将hnp包放到当前目录下:如图:
image.png
3.打包含hnp包的到hap包:
首先需要通过编译器打出hap(就的打包方式)然后通过命令行把这个进行一个拆包:
java -jar app_unpacking_tool.jar --mode <option> --hsp-path <options> --out-path [option] --force [option] --libs true --cpu-abis [option]
image.png
4.在通过命令行将hnp打成一个hap包
java -jar app_packing_tool.jar --mode hap --json-path --maple-so-path [option] --profile-path [option] --maple-so-dir [option] --dex-path [option] --lib-path [option] --resources-path [option] --index-path [option] --out-path --force [option] --compress-level 5
image.png
5.通过这些命令行:打成一个没有签名的hap包
java -jar app_packing_tool.jar --mode app [--hap-path ] [--hsp-path ] --out-path [--signature-path ] [--certificate-path ] [--pack-info-path ] --force [--encrypt-path ] [--pac-json-path ]
image.png -
在通过签名命两行对app包签名:
image.png






