目錄
1 -> 前言
2 -> 使用約束
3 -> 創建模塊
4 -> 構建HAR
4.1 -> 以debug模式構建HAR
4.2 -> 以release模式構建HAR
4.3 -> 構建字節碼格式的HAR
4.4 -> 對HAR進行簽名
1 -> 前言
構建模式:DevEco Studio默認提供debug和release兩種構建模式,同時支持開發者自定義構建模式。
產物格式:構建出的HAR包產物分為包含源碼的HAR、包含js中間碼的HAR以及包含字節碼的HAR三種產物格式。
debug構建模式時,從DevEco Studio NEXT Beta1(5.0.3.800)版本開始,默認產物是字節碼HAR,用于開發者進行本地調測,可提升編譯構建效率;同時支持構建包含源碼的HAR。
release構建模式時,從DevEco Studio NEXT Developer Beta3(5.0.3.600)版本開始,默認不開啟混淆,構建產物和debug模式相同;開啟混淆后,構建產物是包含js中間碼的HAR,用于發布到ohpm中心倉;同時支持配置產物格式為字節碼HAR,用于提升發布產物的安全性。
2 -> 使用約束
- HAR包不支持在module.json5中配置extension組件。
- HAR包不支持pages路由配置。
- HAR自身的構建不建議引用本地模塊,可能導致其他模塊依賴該HAR包時安裝失敗,如果安裝失敗,需要在工程級oh-package.json5中配置overrides。
- 以release模式構建HAR時,對ArkTS代碼的混淆僅支持API 10及以上的Stage模型。
- 引用字節碼Har包時,當字節碼Har包的API版本高于工程的compatibleSDKVersion時,不可用。
- 字節碼Har包和Hap工程的compatibleSDKVersion均為API 12時,當字節碼Har包的compatibleSdkVersionStage高于Hap工程的compatibleSdkVersionStage時,不可用。
3 -> 創建模塊
1. 新建工程時選擇API 10及以上的Stage模型,工程創建完成后,新建“Static Library”模塊。
2. 編寫代碼。
? library ?// HAR根目錄
? ├─libs ?// 存放用戶自定義引用的Native庫,一般為.so文件
? └─src
? │ ? └─main
? │ ? ? ├─cpp
? │ ? ? │ ?├─types ?// 定義Native API對外暴露的接口 ?
? │ ? ? │ ?│ ?└─liblibrary ?
? │ ? ? │ ?│ ? ? ?├─index.d.ts
? │ ? ? │ ?│ ? ? ?└─oh-package.json5?
? │ ? ? │ ?├─CMakeLists.txt ?// CMake配置文件 ?
? │ ? ? │ ?└─napi_init.cpp ?// C++源碼文件
? │ ? ? └─ets ?// ArkTS源碼目錄
? │ ? ? │ ?└─components
? │ ? ? │ ? ? └─MainPage.ets
? │ ? ? ├─resources ?// 資源目錄,用于存放資源文件,如圖片、多媒體、字符串等 ?
? │ ? ? └─module.json5 ?// 模塊配置文件,包含當前HAR的配置信息 ?
? ├─build-profile.json5 ?// Hvigor編譯構建所需的配置文件,包含編譯選項
? ├─hvigorfile.ts ?// Hvigor構建腳本文件,包含構建當前模塊的插件、自定義任務等
? ├─Index.ets ?// HAR的入口文件,一般作為出口定義HAR對外提供的函數、組件等 ??
? └─oh-package.json5 ?// HAR的描述文件,定義HAR的基本信息、依賴項等
3. 在oh-package.json5中“main”字段定義導出文件入口。若不設置“main”字段,默認以當前目錄下Index.ets為入口文件,依據.ets>.ts>.js的順序依次檢索。以將ets/components/MainPage.ets文件設置為入口文件為例:
{..."main": "./src/main/ets/components/MainPage.ets",...
}
4 -> 構建HAR
4.1 -> 以debug模式構建HAR
產物是包含源碼的HAR包,其中包含源碼、資源文件以及配置文件等,方便開發者進行本地調測,不包含build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore、.gitignore/.ohpmignore中配置的文件、cpp工程的CMakeLists.txt。
說明
- 如果是native工程,以debug模式構建的native產物中不包含調試信息和符號表,如需調試,請參考三方源碼調試。
- 從5.0.3.403版本開始,不再建議使用相對路徑跨模塊引用代碼文件,若歷史工程存在此場景的跨模塊引用,會出現warning告警,請嘗試將該文件移至本模塊內,再重新進行編譯。
- 從5.0.3.403版本開始,以debug/release模式構建HAR的流程使用相同的語法校驗規則,若歷史工程出現ArkTS語法報錯,請按照報錯信息修改代碼,以符合ArkTS語言規范。
1. 將工程級build-profile.json5中的useNormalizedOHMUrl字段設置為false。
說明
使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程級build-profile.json5的useNormalizedOHMUrl字段默認值為false,無需執行本步驟。
{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}
2. 點擊DevEco Studio右上角圖標
,Build Mode選擇debug。默認為<Default>模式:在編譯App時使用release模式,編譯HAP/HSP/HAR時使用debug模式。
3. 若部分工程源文件無需構建到HAR包中,可在module目錄下新建.ohpmignore文件,配置打包時要忽略的文件,支持正則表達式寫法。將無需打包進HAR包的文件/文件夾名稱寫入.ohpmignore文件中。DevEco Studio構建時將過濾掉.ohpmignore文件中所包含的文件/文件夾。
4. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。
構建完成后,build目錄下生成HAR包產物。
HAR包產物解壓后,結構如下:
4.2 -> 以release模式構建HAR
從DevEco Studio NEXT Developer Beta3(5.0.3.600)版本開始,默認不開啟混淆,構建產物和debug模式相同,請參考???????以debug模式構建HAR。
開啟混淆后,構建產物是包含js中間碼的HAR包,其中包含源碼混淆后生成的js中間碼文件、資源文件、配置文件、readme、changelog聲明文件、license證書文件,用于發布到ohpm中心倉。
1. 點擊DevEco Studio右上角圖標
,Build Mode中選擇release。默認為<Default>模式:在編譯App時使用release模式,編譯HAP/HSP/HAR時使用debug模式。
在???????編譯模式為release時,為保護代碼資產,建議開啟混淆,在模塊級build-profile.json5文件的release的buildOptionSet配置中,將obfuscation/ruleOptions下的enable字段設置為true。
{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {// 混淆相關參數"obfuscation": {"ruleOptions": {// true表示進行混淆,false表示不進行混淆。5.0.3.600及以上版本默認為false"enable": true,// 混淆規則文件"files": ["./obfuscation-rules.txt"]},// consumerFiles中指定的混淆配置文件會在構建依賴這個library的工程或library時被應用"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"}]
}
3. 將工程級build-profile.json5中的useNormalizedOHMUrl字段設置為false。
說明
使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程級build-profile.json5的useNormalizedOHMUrl字段默認值為false,無需執行本步驟。
{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}
4. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。
構建完成后,build目錄下生成HAR包產物。
HAR包產物解壓后,結構如下:
4.3 -> 構建字節碼格式的HAR
默認產物是包含字節碼的HAR包,其中包含abc字節碼、資源文件、配置文件、readme、changelog聲明文件、license證書文件,提升發布到ohpm中心倉產物的安全性。
由于字節碼HAR包中包含的是編譯后的abc字節碼,因此當字節碼HAR被其他應用模塊(HAP/HSP)依賴時,在執行應用模塊的編譯構建時,不需要再對依賴的HAR中的代碼進行語法檢查和編譯等操作,相比包含源碼的HAR和包含js中間碼的HAR,可以有效提升應用模塊的編譯構建效率。
說明
- 由于構建字節碼HAR需要生成二進制的格式,所以單獨構建字節碼HAR會比構建非字節碼HAR耗時更多。
- 當字節碼HAR被集成使用時,那么該工程的build-profile.json5中的useNormalizedOHMUrl必須設置為true。
- 如果字節碼HAR未開啟混淆,則后續字節碼HAR被集成使用時,將不會再對HAR包進行混淆。
- 字節碼HAR使用的依賴需要配置在本模塊的oh-package.json5的dependencies或dynamicDependencies中,如果不配置,后續字節碼HAR被集成時會出現運行時異常。
- 支持使用不同構建模式進行構建,與構建HAP/HSP相同。
1. 將工程級build-profile.json5的useNormalizedOHMUrl設置為true。
說明
從DevEco Studio NEXT Beta1(5.0.3.800)版本開始,工程級build-profile.json5中useNormalizedOHMUrl字段默認為true,byteCodeHar缺省默認值為true,無需執行步驟1和2。
{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": true}}}]}
}
2. 在HAR模塊的build-profile.json5中,將byteCodeHar設置為true。
{"buildOption": {"arkOptions": {"byteCodeHar": true}}
}
3. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。
構建完成后,build目錄下生成HAR包產物。
HAR包產物解壓后,結構如下:
4.4 -> 對HAR進行簽名
DevEco Studio在構建HAR流程的基礎上,支持對HAR進行簽名。簽名后的HAR包后續可用于接入生態市場。
說明
1. 該能力只在Compatible SDK 5.0.0(12)及以上版本的SDK中支持。
2. 該能力需開啟Hvigor的Daemon能力,請確保當前工程開啟了Daemon,打開Settings > Build,Execution,Deployment > Build Tools > Hvigor,勾選字段Enable the Daemon for tasks。
1. 在hvigor-config.json5中,開啟構建簽名HAR開關:
{"properties": {"ohos.sign.har": true}
}
2. 配置工程簽名信息,配置流程請參考???????配置簽名信息。
3. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。
構建完成后,build目錄下生成簽名HAR包產物。
感謝各位大佬支持!!!
互三啦!!!