官方文檔:https://developer.android.google.cn/studio/projects/android-library
一. 引入庫模塊
要在另一個應用模塊中使用您的 Android 庫的代碼,請按以下步驟操作:
1、通過兩種方式之一將庫添加到您的項目(如果您是在相同項目中創建的庫模塊,則該模塊已經存在,您可以跳過此步驟):
- 添加已編譯的 AAR(或 JAR)文件:
- 點擊 File > New Module。
- 依次點擊 Import .JAR/.AAR Package 和 Next。
- 輸入 AAR 或 JAR 文件的位置,然後點擊 Finish。
- 將庫模塊導入到您的項目中:
- 點擊 File > New > Import Module。
- 輸入庫模塊目錄的位置,然後點擊 Finish。
庫模塊將複製到您的項目中,因此您可以儘管編輯庫代碼。如果您希望維護一個版本的庫代碼,則此方法可能不是您想要的,您應按照上文所述導入編譯的 AAR 文件。
2、確保庫列在您 settings.gradle 文件的頂部,如下面名爲“my-library-module”的庫所示:
include ':app', ':my-library-module'
3、打開應用模塊的 build.gradle 文件,並向 dependencies 塊中添加一行新代碼,如下面的片段所示:
dependencies {
compile project(":my-library-module")
}
4、點擊 Sync Project with Gradle Files。
在上面的示例中,名爲 my-library- module 的 Android 庫模塊成爲 build.gradle 文件所在模塊的構建依賴項。
您的應用模塊現在可以訪問 Android 庫中的任何代碼和資源,庫 AAR 文件在構建時已捆綁到您的 APK 中。
不過,如果希望單獨共享 AAR 文件,則可以在 項目名稱/模塊名稱/build/outputs/aar/ 中找到它,也可以通過點擊 Build > Make Project 的方式重新生成此文件。
二. 開發注意事項
將庫模塊引用添加至您的 Android 應用模塊後,您可以設置它們的相對優先級。構建時,庫會按照一次一個的方式與應用合併,並按照從低到高的優先級順序。
資源合併衝突
- 構建工具會將庫模塊中的資源與相關應用模塊的資源合併。如果在兩個模塊中均定義了給定資源 ID,將使用應用中的資源。
- 如果多個 AAR 庫之間發生衝突,將使用依賴項列表首先列出(位於 dependencies 塊頂部)的庫中的資源。
- 爲了避免常用資源 ID 的資源衝突,請使用在模塊(或在所有項目模塊)中具有唯一性的前綴或其他一致的命名方案。
庫模塊可以包含 JAR 庫
- 您可以開發一個自身包含 JAR 庫的庫模塊;不過,您需要手動編輯相關應用模塊的構建路徑,並添加 JAR 文件的路徑。
庫模塊可以依賴外部 JAR 庫
- 您可以開發一個依賴於外部庫(例如 Maps 外部庫)的庫模塊。在這種情況下,相關應用必須針對包含外部庫(例如 Google API 插件)的目標構建。另外也要注意,庫模塊和相關應用都必須在其清單文件的 元素中聲明外部庫。
庫模塊不得包含原始資源
- 工具不支持在庫模塊中使用原始資源文件(保存在 assets/ 目錄中)。應用使用的任何原始資源都必須存儲在應用模塊自身的 assets/ 目錄中。
應用模塊的 minSdkVersion 必須大於或等於庫定義的版本
- 庫作爲相關應用模塊的一部分編譯,因此,庫模塊中使用的 API 必須與應用模塊支持的平臺版本兼容。
每個庫模塊都會創建自己的 R 類
- 在您構建相關應用模塊時,庫模塊將先編譯到 AAR 文件中,然後再添加到應用模塊中。因此,每個庫都有其自己的 R 類,並根據庫的軟件包名稱命名。從主模塊和庫模塊生成的 R 類會在所需的所有軟件包(包括主模塊的軟件包和庫的軟件包)中創建。
庫模塊可能包含自己的 ProGuard 配置文件
- 通過將 ProGuard 配置文件添加到包含其 ProGuard 指令的庫,您可以在自己的庫上啓用代碼壓縮。構建工具會爲庫模塊將此文件嵌入到生成的 AAR 文件中。在您將庫添加到應用模塊時,庫的 ProGuard 文件將附加至應用模塊的 ProGuard 配置文件 (proguard.txt)。
- 通過將 ProGuard 文件嵌入到您的庫模塊中,您可以確保依賴於此庫的應用模塊不必手動更新其 ProGuard 文件即可使用庫。當 ProGuard 在 Android 應用模塊上運行時,它會同時使用來自應用模塊和庫的指令,因此您不應當只在庫上運行 ProGuard。
- 要指定您的庫的配置文件名稱,請將其添加到 consumerProguardFiles 方法中,此方法位於您的庫的 build.gradle 文件的 defaultConfig 塊內。例如,以下片段會將 lib-proguard-rules.txt 設置爲庫的 ProGuard 配置文件:
android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.txt'
}
...
}
默認情況下,應用模塊會使用庫的發佈構建,即使在使用應用模塊的調試構建類型時亦是如此。要使用庫中不同的構建類型,您必須將依賴項添加到應用的 build.gradle 文件的 dependencies 塊中,並在庫的 build.gradle 文件中將 publishNonDefault 設置爲 true。例如,您應用的 build.gradle 文件中的以下代碼段會使應用在應用模塊於調試模式下構建時使用庫的調試構建類型,以及在應用模塊於發佈模式下構建時使用庫的發佈構建類型:
dependencies {
debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')
}
您還必須在自己庫的 build.gradle 文件的 android 塊內添加以下代碼行,以便將此庫的非發佈配置展示給使用它的項目:
android {
...
publishNonDefault true
}
不過請注意,設置 publishNonDefault 會增加構建時間。
爲了確保您的庫的 ProGuard 規則不會將意外的壓縮副作用施加到應用模塊,請僅包含適當規則,停用不適用於此庫的 ProGuard 功能。嘗試協助開發者的規則可能會與應用模塊或它的其他庫中的現有代碼衝突,因此不應包含這些規則。例如,您的庫的 ProGuard 文件可以指定在應用模塊的壓縮期間需要保留的代碼。