如何在 aar 库中指定依赖项?

Posted

技术标签:

【中文标题】如何在 aar 库中指定依赖项?【英文标题】:How to specify dependencies in aar library? 【发布时间】: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')”? 【参考方案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') 我明白您没有找到此用例的任何确定信息。但是,您对此有任何更新吗?谢谢!

以上是关于如何在 aar 库中指定依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

在 pypi python setup.py 中指定可选依赖项

如何发布带有远程依赖项 (gradle) 的 Android 库 (aar)?

如何将 Google 视觉依赖项添加到我的 .aar?

如何在 .cabal 中指定对外部 C 库的依赖?

如何在 build.gradle 中指定“pig-0.13.0-h2.jar”依赖?

Intellij IDEA 无法识别 Maven 依赖项中指定的类