在比較大的 Android 項目的開發中,咱們常常會遇到工程、jar 包等等之間相互引用的方式。通常咱們經過在 gradle 文件中配置依賴來解決,好比:android
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 包做爲依賴。app
看起來不錯,基本通用的配置都已經存在了。通常對於中等小型的工程,這種開發方式徹底沒有問題。可是有時候 A 和 B 兩個工程,想同時引用另外一個公共的 Module C,而這個 Module 多是一個比較複雜的 Android Module,可能包含了一些主題、UI 、資源文件等等,這時候,若是用 Module 依賴的方式來配置,難免有些困難,由於 A 和 B 都要導入 C,並且要隨時關注 C 的更改。eclipse
好在 Android Studio 提供了 aar 庫的打包方式,咱們能夠把 C 做爲 library 進行打包,輸出 aar 文件,而後在 A 和 B 中,配置 aar 庫依賴,就能夠解決。gradle
要輸出 aar 文件,必須將 Module 配置爲 library,在 gradle 文件中以下:ui
輸出 aar : apply plugin: 'com.android.library'; 輸出 apk :apply plugin: 'com.android.application'。spa
將 Module 配置爲 library 後,構建輸出一個 aar 文件,根據渠道和 BuildType 的不一樣,在相應的目錄下能夠找到。好比對 BuildType 爲 debug 的配置,輸出爲:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份 aar 文件其實就是一份 zip 包,和 jar 不一樣的是,它將一些資源文件、第三方庫文件、so 文件等等都打包在內,而代碼文件編譯後壓縮在在 classes.jar 中.net
studio的項目結構:是以eclipse的工做空間做爲項目名稱,而eclipse的項目做爲studio的moudle而存在。如此則是這樣一個項目架構:debug
如上圖所示整個項目架構中包含有library,aar包。orm
咱們首先須要把library中所須要的依賴庫添加到project中進行依賴,而後進行導入aar/jar操做,找到library中build下的output中aar文件引用,等待build完成,此時在將aar依賴於project當中,這樣就能夠了。