Gradle:下载包含的 aar 库的依赖项

Posted

技术标签:

【中文标题】Gradle:下载包含的 aar 库的依赖项【英文标题】:Gradle: download Dependencies of included aar-library 【发布时间】:2016-07-28 04:48:48 【问题描述】:

我编写了一个库项目cameraBarcodeScanner,它内置在一个 aar 文件中。该库在其 build.gradle 中定义了以下依赖项:

dependencies 
 compile fileTree(dir: 'libs', include: ['*.jar'])
 testCompile 'junit:junit:4.12'
 compile 'com.android.support:appcompat-v7:23.1.0'
 compile 'com.google.zxing:core:3.2.1'
 compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'

我正在像这样的测试应用程序中使用该库:

dependencies 
 compile(name: 'cameraBarcodeScanner-release', ext: 'aar')

Gradle 找到应用程序并能够构建它。但是,在运行时,android 无法找到位于zxing-android-embedded 中的类。在我看来,gradle 没有下载库项目的依赖项。 我也试过:

dependencies 
 compile(name: 'cameraBarcodeScanner-release', ext: 'aar')
  transitive = true

但这也无济于事。我是否必须以某种方式公开库的依赖项?您将如何使用库并让 gradle 下载其依赖项?

提前致谢!

【问题讨论】:

【参考方案1】:

aar 文件不包含嵌套(或transitive)依赖项,并且没有描述库使用的依赖项的 pom 文件。

这意味着,如果您使用 flatDir repo 导入 aar 文件您还必须在项目中指定依赖项

您应该使用 ma​​ven 存储库(您必须在私有或公共 maven 存储库中发布库),您不会遇到同样的问题。 在这种情况下,gradle 使用 pom 文件下载依赖项,该文件将包含依赖项列表。

【讨论】:

感谢您的回答。我会尝试将其上传到我们公司的仓库。 只是想给您反馈,您的回答解决了问题。在对库的 build.gradle 进行一些摆弄以使 gradle 用所有需要的依赖项填充 pom.xml 并将结果上传到我们的仓库后,它成功了! 是的,在我通过 flatDir 添加 aar 后,只有将所有库依赖添加到应用模块依赖后,我才能使用它启动应用 有没有办法包含依赖项? @battlepope 我不认为你想这样做 - 如果你需要 aar,那么你需要 aar。如果您有任何想要与其他人共享的资源文件,Jar 不能替换 aar。例如,您的库中有一个带有 xml 的自定义控件要共享。在那个 aar 是唯一的解决方案。如果 aar 需要任何依赖项,那么这就是通过手动添加在上面保持开放或部分回答的问题。但是,aar 不等于 jar。

以上是关于Gradle:下载包含的 aar 库的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 AAR 形式集成 leakcanary-android 服务

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

当它具有也是 aar 库的依赖项时,如何为 android 库生成 javadoc?

使用 gradle 未解决 aar 库的传递依赖关系

使用 gradle 未解决 aar 库的传递依赖关系

如何将依赖项包含到 .aar 库中?