本地 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
并不能解决您的问题。
您应该使用 maven 存储库(您必须在私有或公共 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 库的传递依赖的主要内容,如果未能解决你的问题,请参考以下文章