如何使用gradle管理第三方deps的不同支持库版本?

时间:2017-12-29 18:45:05

标签: android android-studio gradle android-gradle dependency-management

我有一堆第三方库,我包含在我的基础应用程序中。我无法控制那些第三方模块包含的支持库。这使我很难在我的应用程序中使用相同版本的android支持库。

当我可以从每个依赖项中排除某些库时,我知道使用gradle:

[ undefined, 236, undefined, 238, undefined, undefined ]

然而,有大量的支持库,并将它们全部排除在我的第三方库中,似乎有点过分。

有更好的方法吗?

阅读此博文:https://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/

它表明:

compile('com.test:lib1:1.0.0') {
    exclude group: 'com.android.support'
}

然而,在使用时,我仍然在我的gradle文件中的Android Studio中收到警告,检测到有多个版本的支持库。

如果我的依赖项依赖于支持库的不同版本,该怎么办?在上面的任何一种情况下,我都会强迫第三方库使用它们未构建的特定版本的支持库。我应该使用哪个版本?最新的支持库?所有第三方依赖项的Min支持库?

这是一个最小的gradle文件示例,显示了第三方依赖项,每个依赖项依赖于它们自己的支持库版本。

configurations.all {
  resolutionStrategy {
    preferProjectModules()
  }
}

Android studio发出以下警告:

enter image description here

4 个答案:

答案 0 :(得分:40)

这当然是可能的。在您的项目build.gradle文件(顶级build.gradle文件)中添加以下代码块:

compile "com.android.support:support-v4:$supportlib_version"

以下代码确保所有依赖项的'com.android.support'依赖项版本等于$ supportlib_version。 “com.google.android.gms”框架也是如此。

确保在模块的build.gradle文件中,您还可以将这些版本用于依赖项。 E.g:

gps_version = '[15.0.0, 16.0.0)'

详细了解如何在Official Gradle documentation中强制使用某个依赖项版本。

<强>更新 Google has decoupled library versions。因此,强制特定版本高于15.0.0可能无法正常工作。相反,您可以允许有限范围的版本。以下示例允许任何高于15.0.0但低于16的版本。

<form>
<input type="text" id="register_username">
<input type="password" id="register_password">
</form>

答案 1 :(得分:3)

第一种情况:您有兼容的 libs 已经更新了自己的内部 libs ,这里没问题。

第二种情况:您的项目中有 libs ,其版本高于其他 libs 内部的 libs ,这些 libs 可以更新到没有这样的问题的新版本,这里也没问题。

最坏情况:您的项目中的libs的版本高于其他 libs 内部的其他 libs ,以及这些 libs 没有新版本已经更新了内部 libs ,建议解决方案:

  1. 下载该库并将其作为项目 implementation project(':library')添加到您的应用并更新其内部 libs
  2. 或使用其他库。
  3. 请勿忘记使用./gradlew app:dependencies检查您的依赖关系。

    此外,我相信应该会在那里自动完成。

答案 2 :(得分:0)

您需要使用所需的版本指定依赖项,该依赖项会在需要它的库之前导致冲突。如果你这样做,这些lib将使用你指定的依赖版本。

屏幕截图中的libs示例(来自警告消息)

dependencies {
    compile 'com.android.support:support-v13:26.0.0'
    compile 'com.android.support:support-compat:26.0.0'
    compile 'com.android.support:animated-vector-drawable:26.0.0'
    compile 'com.test:lib1:1.0' // depends on support-v13:25.0.0
    compile 'com.test:lib2:1.0' // depends on support-v13:25.2.0
    compile 'com.test:lib3:1.0' // depends on support-v13:25.4.0
    compile 'com.test:lib4:1.0' // depends on support-v13:26.0.0
}

继续添加依赖项(显示在屏幕截图中的警告中),直到不再有关于不同库版本的警告消息为止。

答案 3 :(得分:0)

制作26 25并在您的gradle中更改为26,或者您可以将compilesdk版本更改为Singleton并将相关的家属更改为25