文章将會講解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 。
在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這個檔案下面,如圖。
3。導入aar項目。
這種方式比較簡單,打開一個project struture ,添加一個新 Module,然後選擇 Import *.JAR or *.AAR Package 的方式導入:
導入成功以後就可以在project目錄中看到剛剛導入的項目了,裡面有awaarssnst-debug.aar這個檔案,和android studio ,以及gradle的配置檔案。如圖
然後,就可以在 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安裝了反編譯工具則可以按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
這裡感謝 ,一帆楓葉作者,個人一直在拜讀他的文章,寫的很好,大家可以去看看,以上是他的連結。