AAR库的依赖性冲突



我正在使用在本地Maven存储库上发布的AAR。由于我想包括及其依赖性,因此我将transitive属性添加到我的依赖项中:

compile ('com.mycompany.domain:artifact:1.0.0@aar') {
    transitive = true
}

现在,假设该项目对CardView支持库v23添加了依赖性:

compile "com.android.support:cardview-v7:23.4.0"

如果我还添加了v24 cardView库的依赖关系,则我的APK发行文件会发生什么:

compile "com.android.support:cardview-v7:24.0.0"

Gradle是否能够管理这一双重依赖性并在没有产生冲突的情况下采取最新依赖性?或者在不使用transitive属性的情况下手动指定DEPEDEDECES。

是否更安全。

另外,transitive属性是否还导入AAR可以设置的Proguard规则?

感谢您的帮助,

只是为了添加一些细节。

您正在使用@aar符号。
这意味着您只想下载AAR伪像,而没有依赖性。
您可以检查[文档] [1]的这一部分:
检查1.4.1.2. Artifact only notation部分:

仅工件符号创建一个模块依赖关系,该模块仅下载带有指定扩展名的工件文件。现有模块描述符被忽略

使用@aar表示法,如果要下载依赖项,则应添加transitive=true,否则您可以省略@AAR,并且它将在不添加传递属性的情况下工作。

关于依赖关系。
Gradle将自动管理依赖项。
使用默认配置Gradle将下载最新版本。

在任何情况下,您也可以排除 build.gradle中的依赖项。

 compile('mylibrary:1.0.0') {
     //excluding a particular transitive dependency:
     exclude module: 'xxx' //by artifact name
     exclude group: 'xxx.xxx' //by group
     exclude group: 'xxx.xxxx', module: 'xxxx' //by both name and group
     //disabling all transitive dependencies of this dependency
     transitive = false
 }

我在Gradle官方文档中找到答案:Gradle Depecty Management Link

gradle依赖求解器会自动进行。Gradle提供的两种主要冲突解决策略是:

最新:使用该依赖项的最新版本。这是Gradle的默认策略,只要版本向后兼容,通常是一个适当的选择。

失败:版本冲突导致构建故障。此策略要求在构建脚本中明确解决所有版本冲突。有关如何明确选择特定版本的详细信息,请参见ResolutionStrategy。

此外,如果在图书馆中声明以下声明,则应将规则出口,如果以下声明(有关更多详细信息,请参见此答案):

defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}

最新更新