2015-06-10 41 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