HarmonyOS之深入解析编译构建的配置和代码混淆
生活随笔
收集整理的這篇文章主要介紹了
HarmonyOS之深入解析编译构建的配置和代码混淆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、概述
- 編譯構(gòu)建是將 HarmonyOS 應(yīng)用的源代碼、資源、第三方庫等打包生成 HAP 或者 APP 的過程。其中,HAP 可以直接運行在真機(jī)設(shè)備或者模擬器中;APP 則是用于應(yīng)用上架到華為應(yīng)用市場。
- 為了確保 HarmonyOS 應(yīng)用的完整性,HarmonyOS 通過數(shù)字證書和授權(quán)文件來對應(yīng)用進(jìn)行管控,只有簽名過的 HAP 才允許安裝到設(shè)備上運行(如果不帶簽名信息,僅可以運行在模擬器中);同時,上架到華為應(yīng)用市場的 APP 也必須通過簽名才允許上架。因此,為了保證應(yīng)用能夠發(fā)布和安裝到設(shè)備上, 需要提前申請相應(yīng)的證書與Profile文件,配置應(yīng)用簽名信息。
- 申請證書和 Profile 文件時,用于調(diào)試和上架的證書與授權(quán)文件不能交叉使用:
-
- 應(yīng)用調(diào)試證書與應(yīng)用調(diào)試 Profile 文件、應(yīng)用發(fā)布證書與應(yīng)用發(fā)布 Profile 文件具有匹配關(guān)系,必須成對使用,不可交叉使用。
-
- 應(yīng)用調(diào)試證書與應(yīng)用調(diào)試 Profile 文件必須應(yīng)用于調(diào)試場景,用于發(fā)布場景將導(dǎo)致應(yīng)用發(fā)布審核不通過;應(yīng)用發(fā)布證書與應(yīng)用發(fā)布 Profile 文件必須應(yīng)用于發(fā)布場景,用于調(diào)試場景將導(dǎo)致應(yīng)用無法安裝。
二、配置應(yīng)用簽名信息
① 申請發(fā)布證書和 Profile 文件
- 通過生成的證書請求文件,向 AppGallery Connect 申請發(fā)布證書和 Profile 文件,如下表所示:
| 1 | 創(chuàng)建AGC項目 | 申請發(fā)布證書前,需要登錄AppGallery Connect后創(chuàng)建一個項目 | 創(chuàng)建您的AGC項目 |
| 2 | 創(chuàng)建HarmonyOS應(yīng)用 | 在AppGallery Connect項目中,創(chuàng)建一個HarmonyOS應(yīng)用,用于發(fā)布證書和Profile文件申請 | 創(chuàng)建HarmonyOS應(yīng)用 |
| 3 | 申請發(fā)布證書和Profile文件 | 在AppGallery Connect中申請、下載發(fā)布證書和Profile文件 | 申請發(fā)布證書和Profile文件 |
② 對應(yīng)用進(jìn)行簽名
- 調(diào)試應(yīng)用簽名的方式包括如下兩種:
-
- 通過 DevEco Studio 自動化簽名的方式對應(yīng)用進(jìn)行簽名;
-
- 通過從 AppGallery Connect 中申請調(diào)試證書和 Profile 文件后,再進(jìn)行簽名。
- 通過 DevEco Studio 自動化簽名的方式更加簡單和高效,因此推薦開發(fā)者使用自動化簽名。
- 連接真機(jī)設(shè)備,確保 DevEco Studio 與真機(jī)設(shè)備已連接(如果同時連接多個設(shè)備,則使用自動化簽名時,會同時將這多個設(shè)備的信息寫到證書文件中)。
- 進(jìn)入File > Project Structure > Project > Signing Configs界面,點擊“Sign In”按鈕進(jìn)行登錄:
- 在 AppGallery Connect 中創(chuàng)建項目和應(yīng)用:
-
- 登錄 AppGallery Connect,創(chuàng)建一個項目。
-
- 在項目中,點擊添加應(yīng)用按鈕,創(chuàng)建一個應(yīng)用。如果是非實名認(rèn)證的用戶,請點擊“HAP Provision Profile管理”界面的 HarmonyOS 應(yīng)用按鈕。
-
-
- 選擇平臺:選擇 APP(HarmonyOS應(yīng)用)。
-
-
-
- 支持設(shè)備:選擇調(diào)試的設(shè)備類型。
-
-
-
- 應(yīng)用包名:必須與 config.json 文件中的“bundleName”取值保持一致。
-
-
-
- 應(yīng)用名稱、應(yīng)用分類、默認(rèn)語言請根據(jù)實際需要進(jìn)行設(shè)置。
-
- 返回 DevEco Studio 的自動簽名界面,點擊 Try Again,即可自動進(jìn)行簽名。自動生成簽名所需的密鑰(.p12)、數(shù)字證書(.cer)和 Profile 文件(.p7b)會存放到用戶 user 目錄下的 .ohos\config 目錄下。
- 設(shè)置完簽名信息后,點擊 OK 進(jìn)行保存,然后可以在工程下的 build.gradle 中查看簽名的配置信息。
③ 通過配置文件存儲簽名信息
- 由于簽名配置是開發(fā)者的私有信息,DevEco Studio 會對簽名配置中的密碼進(jìn)行安全保護(hù),但是這個保護(hù)會對提交 build.gradle 到代碼倉中帶來不便。因此,開發(fā)者可以將簽名配置信息放在一個獨立的文件中,從而可以方便的將 build.gradle 提交到代碼倉,而存放簽名配置信息的文件不用提交。
- 在工程的根目錄下創(chuàng)建一個名為 signing-config.properties 的文件。
- 打開 signing-config.properties 文件,寫入簽名配置信息。簽名配置信息可以從工程的 build.gradle 文件中進(jìn)行拷貝,p12、p7b 和 cer 文件存儲地址可以自定義。
- 打開 build.gradle,修改debug或release類型的簽名配置信息從 signing-config.properties 文件中讀取。下面是 debug 類型簽名信息的配置示例:
- 修改完成后重新同步工程即可。
三、編譯構(gòu)建前配置
- 在進(jìn)行 HarmonyOS 應(yīng)用的編譯構(gòu)建前,需要對工程和編譯構(gòu)建的 Module 進(jìn)行設(shè)置,請根據(jù)實際情況進(jìn)行修改。
-
- build.gradle:HarmonyOS 應(yīng)用依賴 gradle 進(jìn)行構(gòu)建,需要通過 build.gradle 來對工程編譯構(gòu)建參數(shù)進(jìn)行設(shè)置。build.gradle 分為工程級和模塊級兩種類型,其中工程根目錄下的工程級 build.gradle 用于工程的全局設(shè)置,各模塊下的 build.gradle 只對本模塊生效。
-
- config.json:應(yīng)用配置文件,用于描述應(yīng)用的全局配置信息、在具體設(shè)備上的配置信息和 HAP 的配置信息。
① 工程級 build.gradle
- apply plugin:在工程級 Gradle 中引入打包 app 的插件,不需要修改:
- ohos 閉包:工程配置,包括如下配置項:
-
- compileSdkVersion:依賴的 SDK 版本。
-
- signingConfigs:發(fā)布 APP 時的簽名信息,在應(yīng)用發(fā)布中進(jìn)行設(shè)置后自動生成。
- buildscript 閉包:Gradle 腳本執(zhí)行依賴,包括 Maven 倉地址和 HarmonyOS 編譯構(gòu)建插件。HarmonyOS 編譯構(gòu)建插件是以 Gradle 插件為基礎(chǔ),在使用相應(yīng)的 HarmonyOS 編譯構(gòu)建插件時,需要使用配套的 Gradle 插件,兩者之間的配套關(guān)系如下表所示:
| 2.0.0.6 | 5.4.1 |
| 2.0.0.7 2.4.0.1 2.4.1.4 2.4.2.5 2.4.4.2 2.4.5.0 | 6.3 |
- allprojects 閉包:工程自身所需要的依賴,比如引用第三方庫的 Maven 倉庫和依賴包:
② 模塊級 build.gradle
- apply plugin:在模塊級 Gradle 中引入打包 hap 和 library 的插件,無需修改:
- ohos 閉包:模塊配置,包括如下配置項:
-
- compileSdkVersion:依賴的 SDK 版本:
-
- showInServiceCenter:是否在服務(wù)中心露出,只有在創(chuàng)建工程時選擇了“Show in Service Center”選項才會生成該字段:
-
- buildTypes:Java 代碼混淆功能:
-
- signingConfigs:在編譯構(gòu)建生成 HAP 中進(jìn)行設(shè)置后自動生成。
-
- externalNativeBuild:C/C++ 編譯構(gòu)建代碼設(shè)置項。
-
- entryModules:該 Feature 模塊關(guān)聯(lián)的 Entry 模塊:
-
- mergeJsSrc:跨設(shè)備的應(yīng)用編譯構(gòu)建,是否需要合并 JS 代碼。Wearable 和 Lite Wearable 共用一個工程,如下圖所示。當(dāng)進(jìn)行編譯構(gòu)建時,將 wearable/liteWearable 目錄下的 JS 文件與 pages 目錄(Wearable 和 Lite Wearable 共用的源碼)下的 JS 文件進(jìn)行合并打包。
-
- annotationEnabled:支持?jǐn)?shù)據(jù)庫注釋:
- dependencies 閉包:該模塊所需的依賴項:
四、配置 Java 代碼混淆
① 混淆功能說明
- DevEco Studio 提供了代碼混淆功能,通過使用 ProGuard 工具(ProGuard 是一個開源的 Java 代碼混淆器)將工程中的 Java 文件源代碼進(jìn)行混淆,以簡短無意義的名稱(例如a、b、c等),對類、字段和方法等進(jìn)行重命名,可以有效的減少應(yīng)用的大小。
- 代碼混淆功能還可以提升反編譯的難度,降低源代碼泄露的風(fēng)險,起到保護(hù)源代碼的目的。
② 啟動混淆功能
- 在 DevEco Studio 中,混淆功能默認(rèn)是關(guān)閉的。如果需要開啟混淆功能,在模塊的 build.gradle 文件中配置 proguardEnabled 為 true 即可開啟。
- 在 DevEco Studio 中,在開啟混淆功能后,壓縮、優(yōu)化功能均為默認(rèn)開啟的狀態(tài)。如果想要關(guān)閉這些功能,可以在自定義規(guī)則文件中進(jìn)行配置。
- 啟動混淆功能后,在構(gòu)建 Release 類型的 hap 包或 APP 時,DevEco Studio 會自動對源碼進(jìn)行混淆。
③ 混淆規(guī)則文件
- 在 DevEco Studio 中為每一個模塊默認(rèn)提供了 Proguard 規(guī)則文件 proguard-rules.pro:
- 在 proguard-rules.pro 中配置混淆規(guī)則后,構(gòu)建時會將自定義的混淆規(guī)則與 SDK 中默認(rèn)的規(guī)則合并、應(yīng)用到程序中。如果程序引用了其它 HarmonyOS Library 模塊或 HAR 類庫,依賴中被打包的混淆規(guī)則(例如 HarmonyOS Library 模塊中配置的 consumerRulesFiles 文件中的規(guī)則)也會一并應(yīng)用到主程序中。
- HarmonyOS Library 模塊中的混淆規(guī)則文件 consumerRulesFiles,在編譯時會打包到 har 包中,并更名為“proguard.txt”。
- 混淆時開啟記錄日志:
- 混淆時不使用大小寫混合,混淆后的類名為小寫,Windows 用戶必須指定,否則當(dāng)項目中有超過 26 個類的話,ProGuard 就會默認(rèn)混用大小寫文件名,而導(dǎo)致 class 文件相互覆蓋。
- 在讀取依賴的庫文件時,不要略過那些非 public 類:
- 在讀取依賴的庫文件時,不要略過那些非 public 類成員:
- 優(yōu)化算法過濾:
- 默認(rèn)優(yōu)化次數(shù)為 5 次:
- 指定要保留的所有可選屬性,比如可能會被反射方法調(diào)用的屬性:
- 跳過預(yù)校驗階段:
- 保留 JNI 中調(diào)用的類,擁有 native 方法的類名和方法名,保證可以與 native 庫鏈接:
- 保留枚舉類不被混淆:
- 保留 HarmonyOS 應(yīng)用入口類:
- 沒有被使用到的類/方法,可能會在 Proguard 的壓縮/優(yōu)化階段被去除。如需關(guān)閉壓縮/優(yōu)化功能請在規(guī)則文件中配置:
五、編譯構(gòu)建生成 HAP
- HAP 可以直接在模擬器或者真機(jī)設(shè)備上運行,用于 HarmonyOS 應(yīng)用開發(fā)階段的調(diào)試和查看運行效果。
- HAP 按構(gòu)建類型和是否簽名可以分為以下四種形態(tài):
-
- 構(gòu)建類型為 Debug 的 HAP(帶調(diào)試簽名信息):攜帶調(diào)試簽名信息,具備單步調(diào)試等調(diào)試手段的 HAP,一般用于開發(fā)者使用真機(jī)設(shè)備調(diào)試應(yīng)用。
-
- 構(gòu)建類型為 Release 的 HAP(帶調(diào)試簽名信息):攜帶調(diào)試簽名信息,不具備調(diào)試能力的 HAP,相對于 Debug 類型的 HAP 包,體積更小,運行效果與用戶實際體驗一致。一般用于開發(fā)者在代碼調(diào)試完成后,在真機(jī)設(shè)備中驗證應(yīng)用運行效果。
-
- 構(gòu)建類型為 Debug 的 HAP(不帶簽名):不帶調(diào)試簽名信息,具備單步調(diào)試等調(diào)試手段的 HAP,一般用于開發(fā)者使用模擬器調(diào)試應(yīng)用。
-
- 構(gòu)建類型為 Release 的 HAP(不帶簽名):不帶調(diào)試簽名信息,不具備調(diào)試能力的 HAP,相對于 Debug 類型的 HAP 包,體積更小,運行效果與用戶實際體驗一致。一般用于開發(fā)者在代碼調(diào)試完成后,在模擬器設(shè)備中驗證應(yīng)用運行效果。
① 對應(yīng)用進(jìn)行簽名
- 帶簽名信息的 HAP 包(包括 Debug 和 Release 類型),可以在真機(jī)設(shè)備上運行。在構(gòu)建 Hap 包前,需要對應(yīng)用進(jìn)行簽名。
- 調(diào)試應(yīng)用簽名的方式包括如下兩種:
-
- 方式一:通過 DevEco Studio 自動化簽名的方式對應(yīng)用進(jìn)行簽名;
-
- 方式二:通過從 AppGallery Connect 中申請調(diào)試證書和 Profile 文件后,再進(jìn)行簽名。
- 通過 DevEco Studio 自動化簽名的方式更加簡單和高效,因此推薦開發(fā)者使用自動化簽名。
-
- 連接真機(jī)設(shè)備,確保 DevEco Studio 與真機(jī)設(shè)備已連接。
- 進(jìn)入 File > Project Structure > Project > Signing Configs界面,點擊“Sign In”按鈕進(jìn)行登錄。
- 在 AppGallery Connect 中創(chuàng)建項目和應(yīng)用:
-
- 登錄 AppGallery Connect,創(chuàng)建一個項目。
-
- 在項目中,點擊添加應(yīng)用按鈕,創(chuàng)建一個應(yīng)用。如果是非實名認(rèn)證的用戶,請點擊“HAP Provision Profile管理”界面的 HarmonyOS 應(yīng)用按鈕。
-
-
- 選擇平臺:選擇 APP(HarmonyOS 應(yīng)用)。
-
-
-
- 支持設(shè)備:選擇調(diào)試的設(shè)備類型。
-
-
-
- 應(yīng)用包名:必須與 config.json 文件中的“bundleName”取值保持一致。
-
-
-
- 應(yīng)用名稱、應(yīng)用分類、默認(rèn)語言請根據(jù)實際需要進(jìn)行設(shè)置。
-
- 返回 DevEco Studio 的自動簽名界面,點擊 Try Again,即可自動進(jìn)行簽名。自動生成簽名所需的密鑰(.p12)、數(shù)字證書(.cer)和 Profile 文件(.p7b)會存放到用戶user目錄下的 .ohos\config 目錄下。
- 設(shè)置完簽名信息后,點擊 OK 進(jìn)行保存,然后可以在工程下的 build.gradle 中查看簽名的配置信息。
② 構(gòu)建帶簽名信息的 HAP(Debug 類型)
- 打開左下角的 OhosBuild Variants,檢查并設(shè)置模塊的編譯構(gòu)建類型為 debug,默認(rèn)類型為 debug。
- 在主菜單欄,點擊 Build > Build APP(s)/Hap(s) > Build Hap(s),生成已簽名的 Debug HAP:
③ 構(gòu)建帶簽名信息的 HAP(Release 類型)
- 打開左下角的 OhosBuild Variants,檢查并設(shè)置模塊的編譯構(gòu)建類型為 release,默認(rèn)類型為 debug:
- 在主菜單欄,點擊 Build > Build APP(s)/Hap(s) > Build Hap(s),生成已簽名的 Release HAP:
④ 構(gòu)建不帶簽名信息的 HAP(Debug 類型)
- 打開左下角的 OhosBuild Variants,檢查并設(shè)置模塊的編譯構(gòu)建類型為 debug,默認(rèn)類型為 debug:
- 在主菜單欄,點擊Build > Build APP(s)/Hap(s) > Build Hap(s),生成不帶簽名的Debug HAP:
⑤ 構(gòu)建不帶簽名信息的 HAP(Release 類型)
- 打開左下角的 OhosBuild Variants,檢查并設(shè)置模塊的編譯構(gòu)建類型為 release,默認(rèn)類型為 debug:
- 在主菜單欄,點擊 Build > Build APP(s)/Hap(s) > Build Hap(s),生成不帶簽名的Release HAP:
總結(jié)
以上是生活随笔為你收集整理的HarmonyOS之深入解析编译构建的配置和代码混淆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HarmonyOS之变量可视化调试
- 下一篇: HarmonyOS之bytrace命令的