111 votes

La dépendance d'Android a une version différente pour la compilation et l'exécution

Après la mise à jour Android Studio de Canaries 3 de Canaries 4, l'erreur suivante est générée au moment de la construction.

Android dépendance " com.android.support:support-soutien-v4' a une version différente pour le compiler (25.2.0) et d'exécution (26.0.0-beta2) classpath. Vous devez définir manuellement la même version via DependencyResolution.

J'ai couru une recherche complète tout au long du projet et la version 25.1.0 est pas utilisé.

App-construire.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'
}

Bibliothèque-construire.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'

}

Remarque:le Projet a été la construction d'amende dans le Canari 3

137voto

user3908686 Points 1388

Utilisez ce code dans votre buildscript (racine de 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 26.0.0-beta2"
        }
     }
  }
}
 

84voto

Yayo Arellano Points 1395

J'ai eu la même erreur, ce qui a résolu mon problème. Dans ma bibliothèque au lieu d'utiliser compiler ou implémenter, j'utilise "api". Donc à la fin mes dépendances:

 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'
}
 

Vous pouvez trouver plus d’informations sur "api", "implémentation" dans ce lien https://stackoverflow.com/a/44493379/3479489

27voto

jdonmoyer Points 61

Vous devriez être capable de voir exactement où la dépendance est en tirant dans l'étrange version comme une dépendance transitive en cours d'exécution correcte gradle -q dependencies de commande pour votre projet comme décrit ici:

https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies

Une fois que vous suivez ce qui est le tirant, vous pouvez ajouter un exclude pour que spécifique dépendance dans votre gradle fichier avec quelque chose comme:

implementation("XXXXX") {
    exclude group: 'com.android.support', module: 'support-compat'
}

16voto

Après beaucoup de temps et obtenir l'aide d'un ami qui en sait beaucoup plus que moi sur 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"
        // }
    }
 

et dépendances

 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
}
 

dans build.gradle

 allprojects {
   //...
    configurations.all {
        resolutionStrategy.force "com.android.support:support-v4:26.1.0"
    }
 

dans gradle.properties

 android.useDeprecatedNdk=true
android.enableAapt2=false
org.gradle.jvmargs=-Xmx4608M
 

8voto

Dacre Denny Points 17294

La réponse pour moi était aussi d'ajouter ceci à mon fichier build.gradle :

 configurations.all {
  resolutionStrategy.eachDependency { details ->
      if (details.requested.group == 'com.android.support'
              && !details.requested.name.contains('multidex') ) {
          details.useVersion "26.1.0"
      }
  }
}
 

Dans mon cas, il était nécessaire de joindre la stratégie de résolution à un bloc configurations.all { .. } . J'ai placé le bloc configurations.all directement dans mon fichier app/build.gradle (c'est-à-dire que configurations.all n'a pas été imbriqué)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X