los*_*ion 40 android dependency-management gradle android-studio android-gradle-plugin
我有一堆第三方库,我包含在我的基础应用程序中.我无法控制那些第三方模块包含的支持库.这使我很难在我的应用程序中拥有相同版本的android支持库.
当我可以从每个依赖项中排除某些库时,我知道使用gradle:
compile('com.test:lib1:1.0.0') {
exclude group: 'com.android.support'
}
Run Code Online (Sandbox Code Playgroud)
然而,有大量的支持库,并将它们全部排除在我的第三方库的每一个看起来像是矫枉过正.
有没有更好的办法?
阅读这篇博文:https://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/
它表明:
configurations.all {
resolutionStrategy {
preferProjectModules()
}
}
Run Code Online (Sandbox Code Playgroud)
但是当使用它时,我仍然在我的gradle文件中的Android Studio中收到警告,检测到有多个版本的支持库.
如果我的依赖项依赖于支持库的不同版本,我该怎么办?在上面的任何一种情况下,我都会强迫第三方库使用它们未构建的特定版本的支持库.我应该使用哪个版本?最新的支持库?Min支持所有第三方依赖的库?
这是一个最小的gradle文件示例,显示了第三方依赖项,每个依赖项依赖于它们自己的支持库版本.
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
}
Run Code Online (Sandbox Code Playgroud)
Android studio提供以下警告:
Mdl*_*dlc 42
这当然是可能的.在您的项目build.gradle文件(顶级build.gradle文件)中添加以下代码块:
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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码确保所有依赖项的'com.android.support'依赖项版本等于$ supportlib_version."com.google.android.gms"框架也是如此.
确保在模块的build.gradle文件中,您还将这些版本用于依赖项.例如:
compile "com.android.support:support-v4:$supportlib_version"
Run Code Online (Sandbox Code Playgroud)
阅读有关在官方Gradle文档中强制某个依赖项版本的更多信息.
更新 Google已将图书馆版本分离.因此,强制特定版本高于15.0.0可能无法正常工作.相反,您可以允许有限范围的版本.以下示例允许任何高于15.0.0但低于16的版本.
gps_version = '[15.0.0, 16.0.0)'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10416 次 |
| 最近记录: |