天天看點

Android Studio 如何打包和引用 aar

文章将會講解android studio中如惡化打包和引用aar的問題

這邊文章來自個人網易部落格,直接複制到SCDN。為什麼圖檔都顯示不出來呢(很糾結)。

歡迎大家我的網易部落格。

http://bgwan.blog.163.com/blog/static/239301016201673035518338/ 文章将會講解android studio中如惡化打包和引用aar的問題

首先:

jar包與aar包的差別

  • jar是java位元組碼檔案(class檔案)的歸檔檔案,其不包含android中的資源檔案等資訊;
  • aar是android中特有的歸檔檔案,既包含位元組碼檔案也包含android的資源檔案等;

關于如何打包jar的請自行google。 1。建構項目 要輸出aar的包,必須将項目配置成library 。

Android Studio 如何打包和引用 aar

  在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 中。

2。 運作輸出AAR包。

aar在想對應的module這個檔案下面,如圖。

Android Studio 如何打包和引用 aar

3。導入aar項目。

這種方式比較簡單,打開一個project struture ,添加一個新 Module,然後選擇 Import *.JAR or *.AAR Package 的方式導入:

Android Studio 如何打包和引用 aar

 導入成功以後就可以在project目錄中看到剛剛導入的項目了,裡面有awaarssnst-debug.aar這個檔案,和android studio ,以及gradle的配置檔案。如圖

Android Studio 如何打包和引用 aar

然後,就可以在 gradle 中配置依賴了,其他 Module 可以引用這個 Module 了,依賴方式使用 compile project 的方式即可。

缺點:如果沒有原項目,被依賴的 aar 無法 F3 跟進去,無法看到資源檔案内容以及目錄層級等等缺陷(其實我們可以反編譯)。

4。使用配置依賴的方式引用。

這裡官網查過,使用aar有兩種方式。

1)app的gradle.buid配置檔案中,如下代碼(被注釋掉的地方為個人aar應用的utils)

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile(name: 'AndroidUtils', ext: 'aar')
//    compile project(":AndroidUtils")
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:recyclerview-v7:23.2.1'
    compile 'com.android.support:cardview-v7:23.1.1'
}      

首先需要将 aar 檔案放入引用 Module 的 libs 目錄下,和一般的 jar 檔案類似。然後在 gradle 配置檔案中把 libs 目錄加入依賴:(再對比下面發生的變化)

repositories {
    flatDir {
        dirs 'libs' //this way we can find the .aar file in libs folder
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile(name: 'AndroidUtils', ext: 'aar')
//    compile project(":AndroidUtils")
    compile project(":awaarssnst-debug")
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:recyclerview-v7:23.2.1'
    compile 'com.android.support:cardview-v7:23.1.1'
}      

在 gradle 的依賴配置中加入 compile(name: 'xxx', ext: 'aar') 這一句,依賴即可關聯完畢。

建構一下工程,在 Module 的 build/intermediates/exploded-aar 目錄下,可以看到有一些臨時檔案生成,如圖:

Android Studio 如何打包和引用 aar

如果android studio安裝了反編譯工具則可以按F3進入代碼,檢視源代碼檔案,如果有這部分檔案則可以編譯修改代碼進行有話。

細心的朋友已近看到我這裡有兩個aar,是的,其中一個AndroidUtils就是個人封裝的Utils的工具類,帶有資源,友善自己對代碼進行集中管理,一些常用的東西都封裝在了裡面。比如裡面含有一個搜集使用者錯誤的Log日志系統,還有一些常用的字元串的校驗,以及MD5加密算法的,如果想要研究的話,可以自己動手封裝自己的AAR庫。

5。總結很重要。

以上就實戰的分析了android如何建立AAR,以及引用的AAR的兩種方式,細心的讀者可能發現了,我并沒有明說,第二種引用的方式,其實再仔細點你就會發現我已經指出來compile project(":AndroidUtils") .

一個是compile project 一個compile ;一個控制權在你的手中,一個在别人手中。你覺得哪個好。

說明:項目中出現的awNightDay項目是一個 實作了關于 如何實作知乎和簡書的夜間模式以及它的切換效果,其中内用用到了AAR引用的日志系統。

https://github.com/qydq/awNightDay

參考連結:

http://jingyan.baidu.com/article/ca2d939d0faed1eb6c31ced9.html

http://blog.csdn.net/qq_23547831/article/details/51966166

這裡感謝 ,一帆楓葉作者,個人一直在拜讀他的文章,寫的很好,大家可以去看看,以上是他的連結。