【问题标题】:How to specify dependencies in aar library?如何在 aar 库中指定依赖项?
【发布时间】:2015-08-25 07:33:41
【问题描述】:

我创建了一个 Android 库(称为 MyLib),它依赖于 maven repo 上可用的其他库(如 gsonretrofit 等。 )。

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

MyLib 被打包到一个aar 文件中。

目标是发布一个 aar 库,该库可以包含在 Android 应用程序(称为 MyApp)中,而无需再次指定 MyLib 使用的依赖项。

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 而没有依赖问题,我必须为 MyApp 使用以下 build.gradle(如果我没有指定 retrofit 和 gson 作为 deps,会抛出运行时异常,因为这些 deps 不可用)。

dependencies {
    compile('MyLib@aar')

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

我不想在 MyApp 中指定 MyLib 中使用的依赖项,我应该如何编写 build.gradle 文件?

提前致谢

【问题讨论】:

  • 如果MyLib是本地的,你应该使用compile project(':MyLib')
  • 是的,MyLib 是本地的,但打包成 aar。 MyLib 和 MyApp 不在同一个项目中。这是两个不同的项目。
  • 您可以随时参考项目之外的另一个文件夹
  • 指一个项目是的,但是如何执行“compile projet('MyLib@aar')”?

标签: dependencies android-gradle-plugin pom.xml aar


【解决方案1】:

aar 发布到maven 存储库(本地或远程)并使用compile (...@aar) 包含它时,传递依赖项被关闭。

aar 库启用传递依赖项:

compile ('com.mylib:mylib:1.0.0@aar'){
       transitive=true
}

您可以在此处阅读更多相关信息:

Can an AAR include transitive dependencies?

这适用于发布到远程或本地 maven 存储库的 aar 库,在您的情况下,听起来该库甚至不会发布到本地 maven 存储库。我找不到任何关于它是否适用于你的情况的确切信息,但你应该试一试。

【讨论】:

  • 我现在可以在构建 aar 库以发布到本地 repo 时生成包含 deps 的 pom-default.xml 文件(使用 maven 和 maven-publish gradle 插件)。但是这个 pom 文件不包含在 aar 存档中(它只在 build 文件夹中可见,但不包含在最终存档中)。如何将其嵌入到 aar 存档中?
  • @BrentM,如果 aar 文件存在于 Android 应用程序的 libs 目录中,可能与问题中提到的相同: compile(name:'library_name', ext:'aar') 我明白您没有找到此用例的任何确定信息。但是,您对此有任何更新吗?谢谢!
猜你喜欢
  • 2016-04-18
  • 2016-01-06
  • 2016-07-10
  • 2018-05-27
  • 2015-11-11
  • 1970-01-01
  • 2016-01-31
  • 2019-03-20
  • 1970-01-01
相关资源
最近更新 更多