将 Android Studio 从 Canary 3 更新到 Canary 4 后,在构建时抛出以下错误。
Android 依赖 'com.android.support:support-support-v4' 对于编译 (25.2.0) 和运行时 (26.0.0-beta2) 类路径有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本。
我在整个项目中进行了完整搜索,但没有使用版本 25.1.0
。
应用程序构建.gradle
android {
compileSdkVersion 26
buildToolsVersion '26.0.0'
defaultConfig {
applicationId "com.xxx.xxxx"
minSdkVersion 14
targetSdkVersion
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
debug {
debuggable true
}
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
lintOptions {
abortOnError false
}
}}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation project(':core')
implementation com.google.android.gms:play-services-gcm:9.0.0'
implementation('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
transitive = true
}
implementation 'com.android.support:multidex:1.0.1'
implementation 'com.flurry.android:analytics:7.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
implementation 'com.jakewharton:butterknife:8.6.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
}
库-build.gradle:
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
buildToolsVersion '26.0.0'
defaultConfig {
minSdkVersion 14
targetSdkVersion
versionCode 1
versionName "1.0"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation files('libs/model.jar')
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:percent:26.0.0-beta2'
implementation 'com.android.support:appcompat-v7:26.0.0-beta2'
implementation 'com.android.support:support-core-utils:26.0.0-beta2'
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.picasso:picasso:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0'
implementation 'uk.co.chrisjenx:calligraphy:2.2.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.android.support:design:26.0.0-beta2'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'
}
注意:项目在 Canary 3 中构建良好
在您的构建脚本(build.gradle root)中使用此代码:
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "version which should be used - in your case 26.0.0-beta2"
}
}
}
}
我有同样的错误,解决我的问题是什么。在我的库中,我使用“api”而不是使用编译或实现。所以最后我的依赖项:
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
api files('libs/model.jar')
testApi 'junit:junit:4.12'
api 'com.android.support:percent:26.0.0-beta2'
api 'com.android.support:appcompat-v7:26.0.0-beta2'
api 'com.android.support:support-core-utils:26.0.0-beta2'
api 'com.squareup.retrofit2:retrofit:2.0.2'
api 'com.squareup.picasso:picasso:2.4.0'
api 'com.squareup.retrofit2:converter-gson:2.0.2'
api 'com.squareup.okhttp3:logging-interceptor:3.2.0'
api 'uk.co.chrisjenx:calligraphy:2.2.0'
api 'com.google.code.gson:gson:2.2.4'
api 'com.android.support:design:26.0.0-beta2'
api 'com.github.PhilJay:MPAndroidChart:v3.0.1'
}
您可以在此链接 https://stackoverflow.com/a/44493379/3479489 中找到有关“api”、“实施”的更多信息
通过为您的项目运行正确的 gradle -q dependencies
命令,您应该能够准确地看到哪个依赖项将奇数版本作为传递依赖项拉入,如下所述:
https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies
一旦你追踪到是什么把它拉进来,你可以在你的 gradle 文件中添加一个排除到该特定依赖项的内容,例如:
implementation("XXXXX") {
exclude group: 'com.android.support', module: 'support-compat'
}
经过很多时间并从一个比我更了解 android 的朋友那里得到帮助:app/build.gradle
android {
compileSdkVersion 27
// org.gradle.caching = true
defaultConfig {
applicationId "com.cryptoviewer"
minSdkVersion 16
targetSdkVersion 23
versionCode 196
versionName "16.83"
// ndk {
// abiFilters "armeabi-v7a", "x86"
// }
}
和依赖
dependencies {
implementation project(':react-native-camera')
//...
implementation "com.android.support:appcompat-v7:26.1.0" // <= YOU CARE ABOUT THIS
implementation "com.facebook.react:react-native:+" // From node_modules
}
在 build.gradle
allprojects {
//...
configurations.all {
resolutionStrategy.force "com.android.support:support-v4:26.1.0"
}
在 gradle.properties 中
android.useDeprecatedNdk=true
android.enableAapt2=false
org.gradle.jvmargs=-Xmx4608M
resolutionStrategy.force
是唯一对我有用的东西。谢谢!
我的答案是将其添加到我的 build.gradle
文件中:
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "26.1.0"
}
}
}
就我而言,将解决策略包含在 configurations.all { .. }
块中是必要的。我将 configurations.all
块直接放入了我的 app/build.gradle
文件中(即 configurations.all
没有嵌套在其他任何东西中)
这对我有用:
在依赖项部分的 app/build.gradle
中添加以下行:
implementation "com.android.support:appcompat-v7:27.1.0"
或 :27.1.1
在我的情况下
将此代码添加到您的项目级 build.gradle 文件中。
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "version which should be used - in your case 28.0.0-beta2"
}
}
}
}
示例代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath 'io.fabric.tools:gradle:1.31.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "28.0.0"
}
}
}
}
如果有人在 2019 年遇到此依赖问题,请将 Android Studio 更新到 3.4 或更高版本
我通过在 android/build.gradle 文件中升级我的 gradle 依赖项来解决它:classpath 'com.android.tools.build:gradle:3.3.1' (我之前使用的是 3.2 版。
我按照上面提到的 Eddi 解决了这个问题,
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "26.1.0"
}
}
将我的冲突依赖项从实现切换到 api 就可以了。这是mindorks的一篇很好的文章,解释了差异。
https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa
编辑:
这也是我的依赖解决方案
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex')) {
details.useVersion "28.0.0"
}
if (details.requested.group == 'com.google.android.gms'
&& details.requested.name.contains('play-services-base')) {
details.useVersion "15.0.1"
}
if (details.requested.group == 'com.google.android.gms'
&& details.requested.name.contains('play-services-tasks')) {
details.useVersion "15.0.1"
}
}
}
}
在您的库项目中查看将 compileSdkVersion 和 targetSdkVersion 版本设置为与您的应用程序相同的级别
android {
compileSdkVersion 28
defaultConfig {
consumerProguardFiles 'proguard-rules.txt'
minSdkVersion 14
targetSdkVersion 28
}
}
还使所有依赖项处于同一级别
我注释掉//api 'com.google.android.gms:play-services-ads:15.0.1'
它在同步后对我有用
只需在 build.gradle 文件中添加这些行
resolutionStrategy.force “com.android.support:support-media-compat:26.0.0-beta2”
resolutionStrategy.force “com.android.support:support-v4:26.0.0-beta2”
就我而言,我在两个不同的模块中有两个不同版本的以下实现,所以我将两个实现都更改为版本,即:6.0.2 并且它工作。您可能还需要编写依赖项解析,请参阅接受的答案。
应用模块
implementation 'com.karumi:dexter:5.0.0'
公共模块
implementation 'com.karumi:dexter:6.0.2'
我有同样的错误,我通过将此代码添加到 gradle.properties 文件来修复它。
android.enableJetifier=true
configuration.all { resolutionStrategy.force //"com.android.support:appcompat-v7:25.3.1" //这里把出错的库和你要使用的版本一起放 }
将此添加到 allprojects
内的 gradle(项目)
将硬编码版本替换为 + 示例:
implementation 'com.google.android.gms:play-services-base:+'
implementation 'com.google.android.gms:play-services-maps:+'
!details.requested.name.contains('multidex')
确实帮助了我。