Android多模塊構建合并aar解決方案

zhaonyu 8年前發布 | 31K 次閱讀 Java 安卓開發 Android開發 移動開發

前言

前段時間,我在實現gradle多模塊構建遇到一個問題,以前我們基本上是以jar包形式讓開發者集成到工程中使用,但自從Android Studio中有了多module的概念,而我們的SDK也是分了多個模塊進行構建的,但我們這里有個問題就是模塊之間是相互關聯的,不能針對每個模塊單獨打包,而每個module都會生成對應的aar,但并不會把依賴的module代碼打進去,別問我為什么知道,你將aar后綴改為zip,然后反編譯classes.jar就可以看到。所以我們這邊就有了合并aar這樣的一個需求,下面就告訴大家怎么來實現。

android-fat-aar

當時我遇到這個問題,就去github搜了一下,已經有人將合并aar的腳本開源出來了,開源地址如下:

https://github.com/adwiv/android-fat-aar

什么是aar?

什么是aar?它跟jar包有什么區別?它該怎么樣使用?相信大家一定會有這些疑問。首先aar是針對 Android Library 而言的,你可以理解為IDE針對Android Library的打包,一個aar包含什么東西?

它的文件后綴名是.aar,它本身是一個zip文件,強制包含以下文件:

  • /AndroidManifest.xml
  • /classes.jar
  • /res/
  • /R.txt

另外,AAR文件可以包括以下可選條目中的一個或多個:

  • /assets/
  • /libs/name.jar
  • /jni/abi_name/ name .so (where abi_name is one of the Android supported ABIs)
  • /proguard.txt
  • /lint.jar

具體看到這里看如何創建一個Android Library:

https://developer.android.com/studio/projects/android-library.html#aar-contentsjar包跟aar包有什么區別?

jar:只包含了class文件與清單文件,不包含資源文件,如圖片等所有res中的文件。

aar:包含所有資源,class以及res資源文件全部包含。

如果你只是簡單實用一些類庫,你可以直接使用 *.jar 文件,而如果你想既想使用類庫,又想實用資源,那么你就可以創建一個Android Library,使用它生成的 *.aar 文件。

jar文件的使用方式我們應該比較熟悉了,將它復制到工程的libs目錄下,然后在gradle中添加以下腳本:

dependencies {
    compile fileTree(include: ['*.jar'], dir:'libs')
}

aar文件使用同樣需要復制到libs目錄下,并按照以下方式集成:

repositories {
    flatDir {
        dirs'libs'
    }
}

dependencies { compile(name:'your aar', ext:'aar') }</code></pre>

多模塊構建合并aar

這個是本文的重點,我們可以再每個module下的build/outputs/aar下找到編譯生成的 *.aar 文件。

步驟1:

將gradle文件’fat-aar.gradle’到你的項目目錄,然后apply:

apply from: 'fat-aar.gradle'

步驟2:定義嵌入的依賴關系

你需要修改你以前依賴項,并將 compile 更改為 embedded ,作為你想要合并的aar。使用例子如下:

apply from: 'fat-aar.gradle'

dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])

// Order of dependencies decide which will have precedence in case of duplicates
// during manifest / resource merger
embedded project(':librarytwo')
embedded project(':libraryone')
// We can embed android libraries from maven too
embedded 'com.adwiv.internal:librarythree:1.0.0'

compile 'com.android.support:appcompat-v7:22.2.0' //Non embedded dependency

}</code></pre>

通過以上的方式你可以將多個module生成的aar合成一個,大家可以新建一個demo工程來測試下

 

來自:http://blog.csdn.net/wwj_748/article/details/53230706

 

 本文由用戶 zhaonyu 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!