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

12

我编写了一个名为 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个回答

13

aar文件不包含嵌套(或传递)依赖项,也没有描述库所使用的依赖项的pom文件。

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

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


谢谢你的回答。我会尝试将它上传到我们公司的代码库。 - battlepope
1
只是想给你反馈,你的答案解决了问题。在库的 build.gradle 中进行一些调整,使 gradle 填充 pom.xml 中所有所需的依赖项,并将结果上传到我们的 repo 后,它就起作用了! - battlepope
是的,在我通过 flatDir 添加 aar 后,只有在我将所有库依赖项添加到应用程序模块依赖项中后,我才能启动该应用程序。 - mohax
有没有办法包含依赖项? - Jalpesh
@battlepope 我认为你不想这样做 - 如果你需要aar,那么你就需要aar。如果你有任何资源文件想要与其他人分享,jar无法替代aar。例如,你的库中有一个带有xml的自定义控件,你想要分享它。在这种情况下,只有aar是唯一的解决方案。如果aar需要任何依赖项,那么这个问题仍然存在或者部分地通过手动添加来回答。然而,aar并不等于jar。 - codebased

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接