我有一堆第三方库,我包含在我的基础应用程序中.我无法控制那些 3rd 方模块包含的支持库.这使得在我的应用程序中很难拥有相同版本的 android 支持库.
当我可以从每个依赖项中排除某些库时,我知道使用 gradle:
compile('com.test:lib1:1.0.0') {排除组:'com.android.support'}但是,有大量的支持库,并且将它们全部排除在我的每个 3rd 方库中似乎有点矫枉过正.
有没有更好的办法?
阅读这篇博文:
这当然是可能的.在您的项目 build.gradle 文件(顶级 build.gradle 文件)中添加以下代码块:
ext {supportlib_version = '26.1.0'gps_version = '11.2.0'}//确保所有依赖使用相同版本的Android Support库子项目{project.configurations.all {resolutionStrategy.eachDependency {详细信息->if (details.requested.group == 'com.android.support'&&!details.requested.name.contains('multidex')) {details.useVersion "$supportlib_version"}如果(details.requested.group == 'com.google.android.gms'&&!details.requested.name.contains('multidex')) {details.useVersion "$gps_version"}}}}以下代码确保所有依赖项的com.android.support"依赖项版本都等于 $supportlib_version.'com.google.android.gms' 框架也是如此.
确保在您的模块的 build.gradle 文件中,您也将这些版本用于您的依赖项.例如:
编译com.android.support:support-v4:$supportlib_version"在 中阅读有关强制某个依赖版本的更多信息Gradle 官方文档.
更新Google 已经分离了库版本.因此,强制高于 15.0.0 的特定版本可能不起作用.相反,您可以允许有限范围的版本.下面的示例允许任何高于 15.0.0 但低于 16 的版本.
gps_version = '[15.0.0, 16.0.0)'I have a bunch of third party libs that I include in my base application. I cannot control the support library those 3rd party modules include. This makes it hard to have the same version of the android support library in my application.
I know using gradle when I can exclude certain libraries from each dependency:
compile('com.test:lib1:1.0.0') {
exclude group: 'com.android.support'
}
However there are a ton of support libraries and excluding them all for each one of my 3rd party libraries seems like overkill.
Is there a better way?
Reading this blog post: https://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/
It suggests:
configurations.all {
resolutionStrategy {
preferProjectModules()
}
}
However when using that I still get a warning in Android Studio in my gradle file that there are multiple versions of the support library detected.
What do I do if my dependencies depend on different versions of the support library? In either case above I would be forcing the 3rd party libraries to use a specific version of the support library that they were not build with. Which version am I supposed to use? Latest support library? Min support library of all 3rd party dependencies?
Here is a minimal gradle file example showing pulling in 3rd party dependencies that each depend on their own version of the support library.
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.example.app"
minSdkVersion 17
targetSdkVersion 25
}
}
configurations.all {
resolutionStrategy {
preferProjectModules()
}
}
dependencies {
compile 'com.android.support:support-v13: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
}
Android studio gives the following warning:
This is certainly possible. In your projects build.gradle file (the top level build.gradle file) add the following code block:
ext {
supportlib_version = '26.1.0'
gps_version = '11.2.0'
}
//Ensure that all dependencies use the same version of the Android Support library
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex')) {
details.useVersion "$supportlib_version"
}
if (details.requested.group == 'com.google.android.gms'
&& !details.requested.name.contains('multidex')) {
details.useVersion "$gps_version"
}
}
}
}
The following code ensures that the 'com.android.support' dependency version will be equal to $supportlib_version for all dependencies. The same for the 'com.google.android.gms' framework.
Make sure that in your module's build.gradle file you also use these versions for your dependencies. E.g.:
compile "com.android.support:support-v4:$supportlib_version"
Read more about forcing a certain dependency version in the Official Gradle documentation.
Update Google has decoupled library versions. Therefore, forcing a specific version above 15.0.0 may not work. Instead, you can allow a limited range of versions. The example below allows any version higher than 15.0.0 but lower than 16.
gps_version = '[15.0.0, 16.0.0)'
这篇关于如何使用 gradle 为 3rd 方部门管理不同的支持库版本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 IncompIncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 Incompatible
如何在 gradle 中获取当前风味How to get current flavor in gradle(如何在 gradle 中获取当前风味)
如何修复“意外元素<查询>在“清单How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修复“意外元素lt;查询gt;在“清单中找到错误
基于 Android Gradle 中多风味库的多风味应用Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多风味库的多风味应用)
Android 依赖在编译和运行时有不同的版本Android dependency has different version for the compile and runtime(Android 依赖在编译和运行时有不同的版本)
本地 aar 库的传递依赖Transitive dependencies for local aar library(本地 aar 库的传递依赖)