1. 程式人生 > >Android Studio 單工程、多工程級聯依賴下的aar的引用

Android Studio 單工程、多工程級聯依賴下的aar的引用

Android Studio 多工程級聯依賴下的aar的引用

背景:

application A 依賴 library B

library B 依賴 library C

library C 引用aar檔案 ,最終基於application A會構建出Apk釋出

第一種實現方式(這種方式對於單工程專案比較合適):

我在library C中的build.gradle下做如下配置:

apply plugin: 'com.android.library'
repositories {
    flatDir{
        dirs 'libs';
    }
}
dependencies {
    compile fileTree(include
: '*.jar', dir: 'libs') compile files('libs/org.apache.http.legacy.jar') compile(name:'dataReport1.0-release',ext:'aar') }

然後dataReport1.0-release.aar檔案放在了C的libs資料夾下,重新編譯,報錯

錯誤內容是 A 和 B都找不到這個aar檔案,原因是編譯時build.gradle檔案會合並,C 中build.gradle檔案的語句

compile(name:'dataReport1.0-release',ext:'aar')在A 、B編譯時都會生效,所以找不到,此時把aar檔案拷貝到
A和B的libs下問題解決,但是這種方式不可取。
推薦的解決方式:
第一步:aar檔案放在C工程下的libs目錄下
第二步:C中的build.gradle只在dependencies下新增一行compile編譯語句:
apply plugin: 'com.android.library'
dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile files('libs/org.apache.http.legacy.jar')
    compile(name:'dataReport1.0-release'
,ext:'aar')
}
第三步:在project的build.gradle中做如下配置,一定是在project的build.gradle
allprojects {
    repositories {
        jcenter()
        mavenCentral()
        flatDir{
            dirs '../C/libs';
        }
    }
}

重點是flatDir下的配置,這樣可以讓A和B都去C下面的libs下找這個aar檔案!