鸿蒙HAP包解包、打包、签名及加固全流程解析
在鸿蒙应用开发过程中,HAP(HarmonyOS Ability Package)包的解包、打包、签名以及加固是开发者们绕不开的重要环节。今天,就让我们深入探讨这一全流程,帮助大家更好地理解和掌握相关操作。
一、HAP解包
解包是分析和修改HAP包内容的第一步。鸿蒙官方提供了app_unpacking_tool.jar
工具,它通常位于SDK的toolchains\lib
目录下。使用该工具进行解包的基本命令格式如下:
java -jar app_unpacking_tool.jar --mode hap --hap-path ./myapp.hap --out-path ./myapp_unpacked --force true
其中,--mode
参数固定为hap
,--hap-path
指定原始HAP文件路径,--out-path
指定解包后内容存放的目录路径,而--force
参数则用于在目标输出目录已存在时强制覆盖,其默认值为false
。
二、HAP打包
打包是将修改后的文件重新组合成HAP包的过程。鸿蒙官方的app_packing_tool.jar
工具可用于此操作,其命令参数会根据HAP包所使用的Stage模型还是FA模型有所不同。一般来说,FA模型的核心配置文件名为config.json
,而Stage模型的核心配置文件名为module.json5
。
(一)Stage模型打包
基本命令格式为:
java -jar app_packing_tool.jar --mode hap --json-path <module.json路径> --resources-path <资源路径> --ets-path <ets代码路径> --out-path <输出HAP路径> [其他参数] --force true
(二)FA模型打包
基本命令格式为:
java -jar app_packing_tool.jar --mode hap --json-path <config.json路径> --dex-path <dex路径> --lib-path <native库路径> --resources-path <资源路径> --out-path <输出HAP路径> [其他参数] --force true
在打包过程中,--mode
参数固定为hap
,--json-path
指定配置文件路径,--resources-path
指定资源文件目录路径,--ets-path
(仅Stage模型生效)指定ArkTS源代码目录路径,--dex-path
(FA模型常用)指定.dex文件路径,--lib-path
指定native库文件路径,--out-path
指定输出HAP文件路径,且必须以.hap
结尾,--force
参数用于在输出HAP文件已存在时强制覆盖,默认值为false
。
三、HAP签名
签名是确保HAP包安全性和完整性的重要步骤。开发者需要参考华为鸿蒙官方文档申请创建证书等,具体链接为:https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releasecert-0000001946273961。
基本命令格式如下:
java -jar hap-sign-tool.jar sign-app -keyAlias <别名> -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile <cer证书路径> -profileFile <p7b文件路径> -inFile <hap包路径> -keystoreFile <p12文件路径> -outFile <重签名后的hap包路径> -keyPwd <别名密码> -keystorePwd <p12密码>
其中,-keyAlias
为密钥别名,-signAlg
指定签名算法,-mode
为签名模式,-appCertFile
为cer应用证书文件路径,-profileFile
为Provision Profile文件路径,-inFile
为输入文件路径,-keystoreFile
为密钥库文件路径,-outFile
为输出文件路径,-keyPwd
为密钥密码,-keystorePwd
为密钥库密码。
四、HAP安装
完成签名后,即可使用以下命令安装HAP包:
hdc install new-hap-signed.hap
五、so库加固
为了进一步提升HAP包的安全性,对so库进行加固是十分必要的。加固流程位于hap解包后,整体流程为:hap解包 -》对so库进行加固 -》hap打包 -》hap签名 -》hap安装。
加固工具推荐使用Virbox Protector,它提供了多种加固选项,如导入表保护、内存校验、调试器检测、移除调试信息、代码混淆和代码虚拟化等。以下是一个加固命令示例:
"C:\Program Files\senseshield\Virbox Protector 3\bin\virboxprotector_con.exe" "libc++_shared.so" -m "_ZSt14get_unexpected;_ZSt15get_new_handler" --imp-protect=1 --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 --pack=0 -o protected\libc++_shared.so
在打包hap时,需提前将加固后的so库替换到原so文件位置处。
通过上述步骤,开发者可以顺利完成鸿蒙HAP包的解包、打包、签名及加固全流程操作,从而为用户带来更加安全、可靠的应用体验。