AAR 可以包含传递依赖吗?

现在我有一个库项目,比如 Foo 项目,它依赖于像 OkHttp 这样的库。

现在,Foo 有一个 Maven 构建步骤,它生成一个 AAR 并将其推送到公共场所。

现在让我们说我有项目 B,我们将它称为酒吧。Bar 是一个 Android 应用程序,而 Bar 依赖于 Foo。

我有。然而,当我从 Bar 调用 Foo 中的 public static函数来调用 OkHttp 时,我会得到这样的消息:

java.lang.NoClassDefFoundError: com.squareup.okhttp.OkUrlFactory
at com.foo.sdk.utils.OkHttpStack.<init>(OkHttpStack.java:15)

这可能吗?或者 Bar 需要手动依赖 OkHttp 以及 Foo 的其他依赖项?

29562 次浏览

虽然花了点时间,但我找到了我要找的东西。只是碰巧我的搜索方式是这样的。

这个不太常见的答案正是我想要的:

使用 gradle 不能解决 aar 库的传递依赖性

请注意,只有当 aar 库驻留在 maven 存储库中时,依赖项才与 aar 库相关联,因为 pom 文件不包含在 aar 中。

实际上,我需要添加一个

transitive = true

到巴尔的 build.gradle

例如:

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

这样它就包含了我所有的传递函数库。

但是,请注意,这实际上可能会导致依赖项(特别是本地依赖项)之间的冲突,这些冲突可以使用 exclude标记解决。