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

來源:互聯網
上載者:User

標籤:測試   更改   and   針對   pen   指令碼   .com   1.0   guard   

前言

前段時間,我在實現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-contents

jar包跟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‘)}
多模組構建合并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}

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.