在鴻蒙應用開發過程中,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包的解包、打包、簽名及加固全流程操作,從而為用戶帶來更加安全、可靠的應用體驗。