2015-06-10 123 views
9

我創建一個Android庫(稱爲MyLib中),其依賴於對行家回購可用的其他文庫(如GSON改型,等等)。如何指定aar庫中的依賴關係?

MyLib 
| 
|-- Retrofit 
|-- Gson 
|-- ... 

MyLib打包成aar文件。

的目標是不指定第二時間的依賴關係MyLib中用途發佈其可被包括到一個Android應用程序(稱爲MyApp的)的AAR庫。

MyApp 
| 
|-- MyLib 
| |-- Retrofit 
| |-- gson 
| |-- ... 

這是我的build.gradle文件MyLib中

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

現在,如果我想建立和運行MyApp的無依賴的問題,我不得不使用下面的生成.gradle for MyApp(如果我沒有指定翻新gson作爲deps,運行時ex因爲沒有可用的代價,因此拋出了ception)。

dependencies { 
    compile('[email protected]') 

    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
} 

我不想MyApp的被內部MyLib中使用的依賴關係指定,我應該怎麼寫我的build.gradle文件?預先

+0

如果MyLib是本地的,你應該使用compile project(':MyLib') –

+0

是的,MyLib是本地的,但是打包成aar。 MyLib和MyApp不在同一個項目中。這是兩個不同的項目。 – reevolt

+0

你總是可以參考projetc之外的另一個文件夾 –

回答

2

Thansk當發佈一個aar到行家庫(本地或遠程),並使用compile ([email protected])傳遞依賴包括它被關斷。

要啓用傳遞依賴於一個aar庫:

compile ('com.mylib:mylib:[email protected]'){ 
     transitive=true 
} 

你可以閱讀更多關於此這裏:

Can an AAR include transitive dependencies?

這適用於發佈到遠程或本地aar庫Maven倉庫,在你的情況下,這聽起來像庫不會被髮布到本地的Maven倉庫。我無法找到任何明確的信息,說明它是否可以在您的情況下發揮作用,但您應該嘗試一下。

+1

我現在可以在構建aar庫發佈到本地repo時使用maven和maven-publish gradle插件生成包含deps的pom-default.xml文件。但是這個pom文件並不包含在aar文件中(它只能在build文件夾中看到,但不包含在最終歸檔文件中)。我如何將它嵌入到aar檔案中? – reevolt

+0

@BrentM,如果aar文件存在於Android應用程序的libs目錄中,則與問題中提到的可能相同: compile(name:'library_name',ext:'aar') 我知道您沒有找到任何關於此用例的明確信息。但是,有沒有關於這方面的更新?謝謝! – garnet