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