本地 aar 库的传递依赖

Posted

技术标签:

【中文标题】本地 aar 库的传递依赖【英文标题】:Transitive dependencies for local aar library 【发布时间】:2016-08-23 08:31:02 【问题描述】:

我们正在制作一些库,主要是为了我们的 API,我们将使我们的外部开发人员的生活更轻松。

所以我们创建了新的库项目,并将 Retrofit 和其他一些库作为依赖项。

dependencies 
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'

现在当我们构建它时,它会生成aar 文件。

但是现在当我们将aar 文件放到libs 目录并设置为依赖项时,我们仍然必须将相同的依赖项放入用户的build.gradle 文件中,这很糟糕。应该是从图书馆拿的吧?

repositories 
    flatDir 
        dirs 'libs'
    


dependencies 
    compile(name: 'ourlibrary', ext: 'aar') 
        transitive = true;
    

如何让transitive = true 工作?

【问题讨论】:

正在为完全相同的问题寻找解决方案,您是如何解决这个问题的? 嗨,你能解决这个问题吗? 嘿,你是怎么解决这个问题的? 将依赖项放入 README :-( 【参考方案1】:

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

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

在您的情况下,由于上述原因,添加 transitive=true 并不能解决您的问题。

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

【讨论】:

您能否详细说明“您还必须在项目中指定依赖项” 终于到了。看来您必须将其发布到某个地方才能使 transitive 工作。 发布到 mavenLocal。 AAR 的传递性不起作用。 *aar file doesn't contain the nested (or transitive) dependencies* 对于 Android 库的任何本地 libs 文件夹目录是否都是如此?还是通过gradle添加的依赖项? @Abbas 我正在为此寻找合适的解决方案,因为我想在一个文件中分发一个库。到目前为止,我发现的唯一解决方案是创建一个胖 aar。但是,这可能会弄乱主机应用程序中的其他依赖项,因此如果您决定使用它,请小心。这是一个用于执行此操作的脚本的链接:github.com/adwiv/android-fat-aar 还解释了为什么这是一个坏主意:***.com/questions/28605367/…

以上是关于本地 aar 库的传递依赖的主要内容,如果未能解决你的问题,请参考以下文章

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

制作包含依赖库的AAR包

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

原生库的 Android AAR 包

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

AAR 传递依赖 Google 位置服务