2016-04-28 86 views
18

我們正在爲我們的API製作一些庫,以便我們的外部開發人員更輕鬆地工作。本地aar庫的傳遞依賴關係

因此,我們創建了新的庫項目,並將Retrofit和其他一些庫作爲依賴關係。

dependencies { 
    compile 'com.android.support:appcompat-v7:23.3.0' 
    compile 'com.google.code.gson:gson:2.6.2' 
    compile 'com.squareup.retrofit2:retrofit:2.0.1' 
    compile 'com.squareup.retrofit2:converter-gson:2.0.1' 
    compile 'com.squareup.okhttp3:okhttp:3.2.0' 
} 

現在,當我們建立它,它會產生aar文件。

但現在當我們把aar文件libs目錄,並設置爲依賴,我們還是要放在用戶的build.gradle文件,它吮吸相同的依賴。它應該從圖書館採取,對吧?

repositories { 
    flatDir { 
     dirs 'libs' 
    } 
} 

dependencies { 
    compile(name: 'ourlibrary', ext: 'aar') { 
     transitive = true; 
    } 
} 

如何使transitive = true工作?

+0

尋找完全相同問題的解決方案,你是如何得到這個的? – yongsunCN

+0

你好,你能解決這個問題嗎? – Shrikant

回答

30

AAR文件不包含嵌套(或transitive)依賴關係並且不具有其描述庫所使用的依賴關係的POM文件。

這意味着,如果您使用flatDir回購導入aar文件,則必須在項目中指定相關性。

在您的情況下,添加transitive=true無法解決您的問題,因爲上述原因。

你應該使用maven倉庫(你必須在私有或公共maven倉庫中發佈庫),你不會有同樣的問題。
在這種情況下,gradle會使用包含依賴項列表的pom文件下載依賴項。

+0

你能否詳細說明「你必須在你的項目中指定依賴項」 – TejjD

+1

終於到了這裏。看來你必須將它發佈到某個地方纔能做出「傳遞」的工作。 –

+1

我花了幾天時間...非常感謝你! – suomi35