庫模塊開發注意事項

在開發庫模塊和相關應用時,請注意以下行爲和限制。

向 Android 應用模塊添加對庫模塊的引用後,您可以設置它們的相對優先級。在構建時,庫會按照優先級由低到高的順序逐一與應用合併。

  • 資源合併衝突

    構建工具會將庫模塊中的資源與相關應用模塊的資源合併。如果這兩個模塊中都定義了給定的資源 ID,系統會使用應用中的資源。

    如果多個 AAR 庫之間發生衝突,系統會使用依賴項列表中首先列出的庫(靠近 dependencies 塊頂部)中的資源。

    爲了避免常用的資源 ID 發生資源衝突,請考慮使用對模塊具有唯一性(或在所有項目模塊之間具有唯一性)的前綴或其他一致的命名方案。

  • 在多模塊構建中,系統會將 JAR 依賴項視爲傳遞依賴項

    在向輸出 AAR 的庫項目添加 JAR 依賴項時,JAR 會由庫模塊進行處理,並與其 AAR 打包在一起。

    不過,如果您的項目包含庫模塊,並且此模塊已被應用模塊使用,應用模塊便會將庫的本地 JAR 依賴項視爲傳遞依賴項。在這種情況下,本地 JAR 將由使用它的應用模塊進行處理,而不是由庫模塊進行處理。這是爲了加快庫代碼更改導致的增量構建的速度。

    由本地 JAR 依賴項導致的所有 Java 資源衝突都必須在使用相應庫的應用模塊中解決。

  • 庫模塊可以依賴於外部 JAR 庫

    您可以開發一個依賴於外部庫(例如 Google 地圖外部庫)的庫模塊。在這種情況下,相關應用必須針對包含此外部庫的目標(例如 Google API 插件)進行構建。另外也要注意,庫模塊和相關應用都必須在其清單文件的 <uses-library> 元素中聲明外部庫。

  • 應用模塊的 minSdkVersion 必須等於或大於庫定義的版本

    庫是作爲相關應用模塊的一部分進行編譯的,因此,庫模塊中使用的 API 必須與應用模塊支持的平臺版本兼容。

  • 每個庫模塊都會創建自己的 R 類

    在您構建相關應用模塊時,庫模塊會先編譯到 AAR 文件中,然後再添加到應用模塊中。因此,每個庫都有自己的 R 類,並根據庫的軟件包名稱命名。所需的所有軟件包中都會創建從主模塊和庫模塊生成的 R 類,包括主模塊的軟件包和庫的軟件包。

  • 庫模塊可以包含自己的 ProGuard 配置文件

    如果有用於構建和發佈 AAR 的庫項目,您可以向庫的構建配置添加 ProGuard 配置文件,並且 Android Gradle 插件規則適用於您指定的 ProGuard 規則。構建工具會將此文件嵌入到爲庫模塊生成的 AAR 文件中。在您將庫添加到應用模塊後,庫的 ProGuard 文件會附加到應用模塊的 ProGuard 配置文件 (proguard.txt)。

    通過將 ProGuard 文件嵌入到庫模塊中,您可以確保依賴於相應庫的應用模塊不必手動更新其 ProGuard 文件即可使用此庫。當 Android Studio 構建系統構建您的應用時,它會同時使用來自應用模塊和庫的指令。因此無需按照單獨的步驟在庫上運行代碼縮減器。

    如需向庫項目添加 ProGuard 規則,您必須使用 consumerProguardFiles 屬性(位於庫的 build.gradle 文件的 defaultConfig 塊內)指定文件名稱。例如,以下代碼段會將 lib-proguard-rules.txt 設爲庫的 ProGuard 配置文件:

android {
    defaultConfig {
        consumerProguardFiles 'lib-proguard-rules.txt'
    }
    ...
}

不過,如果庫模塊是要編譯到 APK 中的多模塊構建的一部分,並且不會生成 AAR,您應該只在使用相應庫的應用模塊上運行代碼縮減。如需詳細瞭解 ProGuard 規則及其用法,請參閱縮減、混淆處理和優化應用

  • 測試庫模塊的方法與測試應用的方法相同

    主要區別在於,庫及其依賴項會作爲測試 APK 的依賴項自動包含在內。這意味着測試 APK 不僅包含自己的代碼,還包含庫的 AAR 及其所有依賴項。由於沒有單獨的“被測應用”,因此 androidTest 任務只會安裝(和卸載)測試 APK。

    合併多個清單文件時,Gradle 會遵循默認的優先級順序,並將庫的清單合併到測試 APK 的主清單中。

文章源地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章