Android Studio 打包及引用 aar,androidaar
Android Studio 打包及引用 aar1、 簡述
在比較大的 Android 項目的開發中,我們經常會遇到工程、jar 包等等之間相互引用的方式。一般我們通過在 gradle 檔案中配置依賴來解決,比如:
Gradle 的一些基本依賴配置方式如下:
compile fileTree(dir: 'xxx', include: ['*.jar', "*.xxx"]):將某個目錄下所有符合副檔名的檔案作為依賴;
compile 'com.xx.xx:ProjectName:Version':配置Maven` 庫作為依賴;在 Maven 庫中心 可以搜尋自己想用的庫進行依賴;
compile project(':AnotherModule'):配置另一個 Module 作為本 Module 的依賴,被依賴的 Module 必須被匯入到當前工程中;
compile files('xxx.jar'):配置某個 jar 包作為依賴。
看起來不錯,基本通用的配置都已經存在了。一般對於中等小型的工程,這種開發方式完全沒有問題。但是有時候 A 和 B 兩個工程,想同時引用另一個公用的 Module C,而這個 Module 可能是一個比較複雜的 Android Module,可能包含了一些主題、UI 、資源檔等等,這時候,如果用 Module 依賴的方式來配置,不免有些困難,因為 A 和 B 都要匯入 C,而且要隨時關注 C 的更改。
好在 Android Studio 提供了 aar 庫的打包方式,我們可以把 C 作為 library 進行打包,輸出 aar 檔案,然後在 A 和 B 中,配置 aar 庫依賴,就可以解決。
2、aar 檔案簡介
要輸出 aar 檔案,必須將 Module 配置為 library,在 gradle 檔案中如下:
- 輸出 aar :
apply plugin: 'com.android.library';
- 輸出 apk :
apply plugin: 'com.android.application'。
將 Module 配置為 library 後,構建輸出一個 aar 檔案,根據渠道和 BuildType 的不同,在相應的目錄下可以找到。比如對 BuildType 為 debug 的配置,輸出為:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份 aar 檔案其實就是一份 zip 包,和 jar 不同的是,它將一些資源檔、第三方庫檔案、so 檔案等等都打包在內,而代碼檔案編譯後壓縮在在 classes.jar 中。比如:
3、匯入 aar 的方式引用
這種方式比較簡單,開啟 Project Structure,添加一個新 Module,然後選擇 Import *.JAR or *.AAR Package 的方式匯入:
匯入後,在你的工程下面,會產生一個檔案夾,裡面是 aar 檔案以及 Android Studio 的設定檔。
接著可以在 gradle 中配置依賴了,其他 Module 可以引用這個 Module 了,依賴方式使用 compile project 的方式即可。
缺點:被依賴的 aar 無法 F3 跟進去,無法看到資源檔內容以及目錄層級等等缺陷。
4、使用配置依賴的方式引用
gradle 其實還有另一種依賴可以引用 aar:
compile(name: 'xxx', ext: 'aar')。
首先需要將 aar 檔案放入引用 Module 的 libs 目錄下,和一般的 jar 檔案類似。然後在 gradle 設定檔中把 libs 目錄加入依賴:
repositories { flatDir { dirs 'libs' }}
接著在 gradle 的依賴配置中加入 compile(name: 'xxx', ext: 'aar') 這一句,依賴即可關聯完畢。構建一下工程,在 Module 的 build/intermediates/exploded-aar 目錄下,可以看到有一些臨時檔案產生:
看起來完全是引用 aar 的解壓版本。Android Studio 安裝反編譯外掛程式後,可以通過 F3 跟進到 class 檔案裡面,如果你有被依賴 Module 的原始碼的話,還可以 Attach Source 關聯原始碼查看。另外,可以很方便的查看 aar 中的資源檔。
另外,這種依賴方式更新 aar 後,產生的臨時檔案也會隨之變動,不用擔心改動不同步的問題。
5、總結
綜上,介紹了 aar 檔案的產生方式,以及兩種 aar 依賴的方式,經過實戰檢驗,第二種通過配置 gradle 依賴的方式簡單易用,只需一行代碼即可搞定。