目錄
什么是多產物構建
如何定義多個構建產物
如何在項目中使用
參考文章
什么是多產物構建
在鴻蒙應用開發中,一個應用可定義多個 product,每一個 product 對應一個定制的 APP 包,每個 product 中支持對 bundleName、bundleType、輸出產物名稱、icon 和 label 以及包含的 target 資源文件等內容進行定制。與此同時,也可以將環境配置和簽名信息通過 product 進行隔離,通過選項切換環境進行構建,避免頻繁的手動修改關鍵參數而造成打包遺漏的情況。
如何定義多個構建產物
在項目最外層的 build-profile.json5 文件中的 products 字段中新增?product,字段解釋可參考文章:工程級build-profile.json5文件。
這里我們針對環境控制做演示,需要用到?buildOption?/?arkOptions?/?buildProfileFields 字段,該字段中的參數設置后,切換產物后會重新生成一份?BuildProfile.ets 文件,該文件可被項目導入并使用。
需要注意的是:在定制 product 時,必須存在 "default" 的 product,否則編譯時會出現錯誤。
示例 JSON:
{ "app": { "signingConfigs": [{"name": "default", // debug類型簽名配置"type": "HarmonyOS","material": {"storePassword": "xxxxxxxxxx","certpath": "C:/Users/pc/xxxxxxxxxx.cer","keyAlias": "xxxxxxxxxx","keyPassword": "xxxxxxxxxx","profile": "C:/Users/pc/xxxxxxxxxx.p7b","signAlg": "SHA256withECDSA","storeFile": "C:/Users/pc/xxxxxxxxxx.p12"}},{"name": "release", // release類型簽名配置"type": "HarmonyOS","material": {"storePassword": "xxxxxxxxxx","certpath": "C:/Users/pc/xxxxxxxxxx.cer","keyAlias": "xxxxxxxxxx","keyPassword": "xxxxxxxxxx","profile": "C:/Users/pc/xxxxxxxxxx.p7b","signAlg": "SHA256withECDSA","storeFile": "C:/Users/pc/xxxxxxxxxx.p12"}}], "products": [ {"name": "default","signingConfig": "default","compatibleSdkVersion": "5.0.1(13)","runtimeOS": "HarmonyOS","buildOption": {"strictMode": {"caseSensitiveCheck": true,"useNormalizedOHMUrl": true},"arkOptions": {"buildProfileFields": {// 接口base"baseApiUrl": "https://default.test.cn"}}}}, // dev開發產物(測試環境){ "name": "start_develop", // 產物名稱"compatibleSdkVersion": "5.0.2(14)", "runtimeOS": "HarmonyOS", "signingConfig": "default","compatibleSdkVersion": "5.0.1(13)","runtimeOS": "HarmonyOS","buildOption": {"strictMode": {"caseSensitiveCheck": true,"useNormalizedOHMUrl": true},"arkOptions": {"buildProfileFields": { // 構建配置自定義參數// 接口base"baseApiUrl": "https://debug.develop.cn"}}}}, // release開發產物(生產環境){ "name": "start_release", // 產物名稱 "compatibleSdkVersion": "5.0.2(14)", "runtimeOS": "HarmonyOS", "signingConfig": "default","compatibleSdkVersion": "5.0.1(13)","runtimeOS": "HarmonyOS","buildOption": {"strictMode": {"caseSensitiveCheck": true,"useNormalizedOHMUrl": true},"arkOptions": {"buildProfileFields": { // 構建配置自定義參數// 接口base"baseApiUrl": "https://release.produce.cn"}}}}, // release打包產物(生產環境構建release版本){ "name": "start_release_build", // 產物名稱 "compatibleSdkVersion": "5.0.2(14)", "runtimeOS": "HarmonyOS", "signingConfig": "release","compatibleSdkVersion": "5.0.1(13)","runtimeOS": "HarmonyOS","output": { "artifactName": "customizedProductOutputNameB" // 自定義打包后的app產物名稱}, "buildOption": {"strictMode": {"caseSensitiveCheck": true,"useNormalizedOHMUrl": true},"arkOptions": {"buildProfileFields": { // 構建配置自定義參數// 接口base"baseApiUrl": "https://release.produce.cn"}}}} ], "buildModeSet": [ { "name": "debug", }, { "name": "release" } ] },
}
上方 JSON 中配置了 3 個產物與 2 個簽名,3 個產物分別為 develop 開發環境產物,?release 生產環境產物,release 生產環境構建產物。其中生產構建產物綁定了 "release"?簽名,這樣做的好處是,當我們切換環境選項時,簽名相關配置也將一同被改變,無需手動更換簽名。
如何在項目中使用產物
1. 在第一步配置完 product 后,還需在 modules 中的?applyToProducts 字段添加剛才配置的 product 產物,項目中創建的其他 hsp 也需一同配置,不然編譯報錯。
2. 配置完 products 與 modules 后,重新運行項目后,每個模塊下均會生成新的 BuildProfile.ets 文件,在項目中使用相對路徑導入即可。
// 導入
import BuildProfile from '../../../../BuildProfile'// 使用
let BASE_URL: string = BuildProfile.baseApiUrl
參考文章
配置APP多目標構建產物