webentwicklung-frage-antwort-db.com.de

Die Versionen für App (22.0.0) und Test-App (21.0.3) sind unterschiedlich

Nach dem Upgrade auf API 22 und der Unterstützung von lib revision 22 erhalte ich die folgende Warnung:

Warnung: Konflikt mit der Abhängigkeit "com.Android.support:support-annotations". Behobene Versionen für app (22.0.0) und Test-App (21.0.3) unterscheiden sich.

Gradle selbst ist verzeihender, aber Android Studio nicht so sehr.

Ich habe keine mit 21.0.3 deklarierten Abhängigkeiten ... Hat eine der abhängigen Bibliotheken, die 21.0.3 verwenden, und Google vergessen, sie mit dem Rest des Stapels zu aktualisieren?

Mein build.gradle mit den Extras ausgeschnitten

Android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.Android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.Android.gms:play-services-base:6.5.87'
    compile 'com.Android.support:support-v4:22.0.0'
    compile 'com.Android.support:appcompat-v7:22.0.0'
    compile 'com.Android.support:support-v13:22.0.0'
    compile 'com.Android.support:cardview-v7:22.0.0'
    compile 'com.Android.support:palette-v7:22.0.0'
    compile 'com.Android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.Apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:Android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.Android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.0'
  }

Update: (Danke, Mark)

Sieht aus wie Espresso-Beitrag

+--- com.Android.support.test:testing-support-lib:0.1 (*)
\--- com.Android.support.test.espresso:espresso-contrib:2.0
     +--- com.Android.support:recyclerview-v7:21.0.3
     |    +--- com.Android.support:support-annotations:21.0.3
     |    \--- com.Android.support:support-v4:21.0.3
     |         \--- com.Android.support:support-annotations:21.0.3
     +--- com.Android.support:support-v4:21.0.3 (*)
     \--- com.Android.support.test.espresso:espresso-core:2.0 (*)
178
copolii

Schritt 1, wenn Sie sich mit dieser Art von Dingen beschäftigen, ist, sich mit der Befehlszeilenlinie von Gradle vertraut zu machen.

Schritt # 2 besteht darin, den Gradle-Abhängigkeitsbericht auszuführen (z. B. gradle -q app:dependencies von der Projektwurzel). Dadurch wird die ASCII - Struktur bereitgestellt, wie in der Aktualisierung der Frage gezeigt, und es sollte Ihnen helfen, zu ermitteln, was nach den in Konflikt stehenden Artefaktversionen gefragt wird.

Schritt 3 ist zu entscheiden, was ersetzt werden muss. Sie haben sich dafür entschieden, nur den Konflikt (support-annotations) zu ersetzen. Persönlich wäre ich mit der Wurzel des falschen Versionsbaums (recyclerview-v7) gegangen, obwohl dies meines Wissens nach nicht die beste Vorgehensweise in diesem Fall ist.

Schritt 4 besteht darin, die exclude-Direktive hinzuzufügen, um das, was Sie in Schritt 3 gewählt haben, zu blockieren:

androidTestCompile ('com.Android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

Schritt # 5 besteht darin, den Haken an dieser Änderung zu testen. Sie sagen, dass espresso-contrib für die 22.0.0-Edition von support-annotations benötigt wird. Das kann funktionieren. Das darf nicht. Das hängt von der Rückwärtskompatibilität des Konflikts ab. In diesem Fall sollte support-annotations ziemlich gut sein.

Schritt # 6 besteht darin, ein Getränk Ihrer Wahl zu konsumieren, das für Ihr Land und Ihre Tageszeit geeignet ist.

283
CommonsWare

Um das Problem zu lösen, fügen Sie die folgende Zeile in mein build.gradle-Skript ein

androidTestCompile 'com.Android.support:support-annotations:xx.x.x'

Ersetzen Sie xx.x.x durch die Version der Supportanmerkungen, die Ihre App verwendet. Dies wird in Ihren Abhängigkeiten oder in der Gradle-Synchronisierungsnachricht wie folgt angezeigt: Resolved version for app (xx.x.x), falls ein Problem beim Synchronisieren auftritt.

146
Renan Nery

Eigentlich handelt es sich um einen Fehler der neuen Update-Version von Espresso Contrib. Sie können diesen Workaround weiterleiten: Android-testing/build.gradle

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}
58
bony

Siehe https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.Android.support:support-annotations:23.1.1'
  }
}

Das hat mein Problem gelöst.

Alternativ können Sie gradlew unter Windows und ./gradlew für mac/linux ausführen. Bei Bedarf wird Ihre Abhängigkeit heruntergeladen

23
maruti060385

Ich stieß auch auf dieses Problem sowie auf andere Konflikte, die appcompat betrafen, und die Lösung, die ich fand, bestand darin, Test-Kompilierungen hinzuzufügen und diese auf die derzeit verwendete SDK zu setzen. In meinem Fall ist es 25, also sieht es so aus:

androidTestCompile 'com.Android.support:support-annotations:25.+'
androidTestCompile 'com.Android.support:appcompat-v7:25.+'
androidTestCompile 'com.Android.support:support-v4:25.+'
androidTestCompile 'com.Android.support:recyclerview-v7:25.+'
androidTestCompile 'com.Android.support:design:25.+'

Wie Sie sehen, habe ich außerdem die Designabhängigkeit hinzugefügt, die sich auf Android Material Design bezieht. 

Hoffe es hilft =) 

8
glauber

für sdkversion 25

     androidTestCompile 'com.Android.support:support-annotations:25.2.0'
8
dc10

sie können gradlew unter Windows und ./gradlew für Mac/Linux ausführen. Dadurch wird Ihre Abhängigkeit bei Bedarf heruntergeladen.

Sie können überprüfen, ob eine Bibliothek von der Support-Annotation abhängig ist, oder ob eine Bibliothek irrtümlich benannt wurde, und versuchen, sie in gradle wie unten stehend auszuschließen

compile ("org.Apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") { Gruppe ausschließen: 'junit' }

Fehler: Konflikt mit der Abhängigkeit 'junit: junit'. Die aufgelösten Versionen für App (3.8.1) und Test-App (4.12) unterscheiden sich. Weitere Informationen finden Sie unter g.co/androidstudio/app-test-app-conflict. 

dies war der Fehler, den ich bekam, also habe ich das Problem mit der Gradle-Line behoben

3
maruti060385

Löschen Sie einfach diese Zeilen in Ihrer build.gradle -Datei:

androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
2

Ich hatte das gleiche Problem mit 26.0.0 und 27.1.1 und habe eigentlich nur die frühere Version auf die spätere Version aktualisiert, damit sie funktioniert. 

0
Weapon X

Dies ist ein häufiges Problem im Instrumentationstest, wie in here angegeben, und kann durch einfaches Hinzufügen der Abhängigkeiten für androidTestCompile im build.gradle behoben werden. In meinem Fall kam es zu Konflikten im Zusammenhang mit Appcompat, Recycling und Design. Und durch das Hinzufügen folgender Zeilen aufgelöst

    androidTestCompile 'com.Android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.Android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.Android.support:design:23.4.0'
0
cammando