1. 什麼是AAR
關于aar檔案,摘取官方的解釋:AAR 檔案的檔案擴充名為 .aar,Maven 工件類型也應當是 aar。檔案本身是一個包含以下強制性條目的 zip 檔案:
- /AndroidManifest.xml
- /classes.jar
- /res/
- /R.txt
此外,AAR 檔案可能包含以下可選條目中的一個或多個:
- /assets/
- /libs/名稱.jar
- /jni/abi 名稱/名稱.so(其中 abi 名稱 是 Android 支援的 ABI 之一)
- /proguard.txt
- /lint.jar
2. AAR檔案位置
AAP的位置為 【項目名稱/子產品名稱/build/outputs/aar/】 中,如果沒有aar檔案,可以通過點選 Build > Make Project 的方式重新生成此檔案。
需要注意的是:隻有library子產品才會生成aar檔案,application子產品是不會生成的。
3. 如何使用AAR檔案
- 建立一個library工程,寫一段簡單的代碼。 TestUtils
Gradle 使用技巧(五) - AAR - Build -> Make Project
aar檔案位置
- 将aar檔案複制到需要引入的子產品下的libs檔案夾中。
放入aar
- gradle中配置引用
在android同級節點做以下配置:
repositories{
flatDir{
dirs 'libs'
}
}
dependencies中配置依賴:
//implementation(name:'xxx',ext:'aar')
implementation(name:'core-library',ext:'aar')
然後同步一下,等待編譯完成。
- 驗證是否引入成功
嘗試調用
4. AAR開發注意事項
-
資源合并沖突
建構工具會将庫子產品中的資源與相關應用子產品的資源合并。如果在兩個子產品中均定義了給定資源 ID,将使用應用中的資源。
如果多個 AAR 庫之間發生沖突,将使用依賴項清單首先列出(位于 dependencies 塊頂部)的庫中的資源。
為了避免常用資源 ID 的資源沖突,請使用在子產品(或在所有項目子產品)中具有唯一性的字首或其他一緻的命名方案。
-
庫子產品可以包含 JAR 庫
可以開發一個自身包含 JAR 庫的庫子產品;不過,需要手動編輯相關應用子產品的建構路徑,并添加 JAR 檔案的路徑。
-
庫子產品可以依賴外部 JAR 庫
在開發一個依賴于外部庫(例如 Maps 外部庫)的情況下,相關應用必須針對包含外部庫(例如 Google API 插件)的目标建構。另外也要注意,庫子產品和相關應用都必須在其清單檔案的 <uses- library> 元素中聲明外部庫。
-
庫子產品不得包含原始資源
工具不支援在庫子產品中使用原始資源檔案(儲存在 assets/ 目錄中)。應用使用的任何原始資源都必須存儲在應用子產品自身的 assets/ 目錄中。
-
應用子產品的 minSdkVersion 必須大于或等于庫定義的版本
庫作為相關應用子產品的一部分編譯,是以,庫子產品中使用的 API 必須與應用子產品支援的平台版本相容。
-
每個庫子產品都會建立自己的 R 類
在建構相關應用子產品時,庫子產品将先編譯到 AAR 檔案中,然後再添加到應用子產品中。是以,每個庫都有其自己的 R 類,并根據庫的軟體包名稱命名。從主子產品和庫子產品生成的 R 類會在所需的所有軟體包(包括主子產品的軟體包和庫的軟體包)中建立。