Frage Wie kann Gradle's Abhängigkeitsbaum verwendet werden, um Android-Support-Bibliotheksversionskonflikte aufzulösen?


der Katalysator

Ich habe Android Studio auf 2.3 und Gradle auf 3.3 aktualisiert

das anfängliche Problem

Nachdem ich das Gradle-Plugin auf 3.3 aktualisiert hatte, erhielt ich den Fehler "Fehler: Die SDK-Build-Tools-Version (23.0.3) ist zu niedrig für das Projekt": mymodulename '. Mindestanforderung ist 25.0.0 "

Ich habe versucht, sowohl buildToolsVersion zu 25.0.2 und CompileSdkVersion zu 25, zusammen mit allen com.android.support Abhängigkeiten (da ihre Hauptversion muss compileSdkVersion übereinstimmen). Diese Anpassung löste dieses Problem, aber dann wurde mir klar, dass meine App Nougat noch nicht unterstützt, also reduzierte ich die compileSdkVersion auf meine targetSdkVersion von 23. Die Fehlermeldung über zu niedrige Build-Tools war immer noch weg, also dachte ich, ich wäre im Klartext .

der erste Abhängigkeitsfehler

Nachdem ich compileSdkVersion auf 23 heruntergeklopft habe, habe ich versucht, es neu zu erstellen, und habe mehrere Fehler ähnlich "Error: (3) Error retrieving parent für item: Keine Ressource gefunden, die dem angegebenen Namen entspricht" android: TextAppearance.Material.Widget.Button.Borderless. Farbig'". Ich merkte, dass ich vergessen hatte, meine Abhängigkeiten von com.android.support so zu ändern, dass ihre Hauptversion wieder mit der niedrigeren compileSdkVersion übereinstimmte, also stieß ich sie auf 23.3.0

der zweite Abhängigkeitsfehler 

Nach dem Auflösen des ersten Abhängigkeitsfehlers konnte ich meine App erneut kompilieren und ausführen. Allerdings gab es immer noch einen roten Kringel unter meiner ersten com.android.support-Abhängigkeit, mit der Fehlermeldung "Alle com.android.support-Bibliotheken müssen genau die gleiche Versionsspezifikation verwenden (das Mischen von Versionen kann zu Laufzeitabstürzen führen). Gefundene Versionen 24.0 .0, 23.3.0 Beispiele sind com.android.support:support-v4:24.0.0 und com.android.support:animated-vector-drawable:23.3.0 "

Nichts in meinem Build.gradle speziell verweist auf 24.0.0, siehe:

apply plugin: 'com.android.application'


android {
    compileSdkVersion 23
    buildToolsVersion '25.0.2'


    defaultConfig {
        applicationId ...
        minSdkVersion 16
        targetSdkVersion 23
        versionCode ...
        versionName ...
    }
    buildTypes {
        debug{
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions{

        //check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    dexOptions{
        jumboMode true
    }

}

repositories {
    // You can also use jcenter if you prefer
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    //android support libs etc.
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:support-v13:23.3.0'
    compile 'com.android.support:mediarouter-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    //snackbar support
    compile 'com.android.support:design:23.3.0'

    //Facebook Android SDK
    compile 'com.facebook.android:facebook-android-sdk:4.7.0'
    //Facebook Audience Network SDK. Only versions 4.6.0 and above are available
    compile 'com.facebook.android:audience-network-sdk:4.7.0'

    //gplay services dependencies
    compile 'com.google.android.gms:play-services-plus:10.0.1'
    compile 'com.google.android.gms:play-services-analytics:10.0.1'
    compile 'com.google.android.gms:play-services-location:10.0.1'

    //provides Firebase Analytics
    compile 'com.google.firebase:firebase-core:10.0.1'

    //provides Google Mobile Ads SDK, a.k.a the AdMob service.
    compile 'com.google.firebase:firebase-ads:10.0.1'

    //dependencies required by the InMobi ads SDK
    compile 'com.squareup.picasso:picasso:2.5.2'

}

apply plugin: 'com.google.gms.google-services'

der Abhängigkeitsbaum

Um herauszufinden, woher die 24.0.0-Abhängigkeit kam, habe ich eine Abhängigkeitsbaumstruktur erstellt mit './gradlew -q Abhängigkeiten mymodulename: Abhängigkeiten - Konfiguration kompilieren'. Die Ausgabe ist:

    compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:23.3.0
|    +--- com.android.support:support-vector-drawable:23.3.0
|    |    \--- com.android.support:support-v4:23.3.0 -> 24.0.0
|    |         \--- com.android.support:support-annotations:24.0.0
|    +--- com.android.support:animated-vector-drawable:23.3.0
|    |    \--- com.android.support:support-vector-drawable:23.3.0 (*)
|    \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:support-v13:23.3.0
|    \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:mediarouter-v7:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0 (*)
|    \--- com.android.support:palette-v7:23.3.0
|         \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:design:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0 (*)
|    +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
|    \--- com.android.support:recyclerview-v7:23.3.0
|         +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
|         \--- com.android.support:support-annotations:23.3.0 -> 24.0.0
+--- com.facebook.android:facebook-android-sdk:4.7.0
|    +--- com.parse.bolts:bolts-android:1.2.0
|    \--- com.android.support:support-v4:[22,23) -> 24.0.0 (*)
+--- com.facebook.android:audience-network-sdk:4.7.0
|    \--- com.google.android.gms:play-services-ads:7.8.0 -> 10.0.1
|         +--- com.google.android.gms:play-services-ads-lite:10.0.1
|         |    \--- com.google.android.gms:play-services-basement:10.0.1
|         |         \--- com.android.support:support-v4:24.0.0 (*)
|         +--- com.google.android.gms:play-services-base:10.0.1
|         |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-tasks:10.0.1
|         |         \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.android.gms:play-services-clearcut:10.0.1
|         |    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         \--- com.google.android.gms:play-services-gass:10.0.1
|              \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-plus:10.0.1
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-analytics:10.0.1
|    +--- com.google.android.gms:play-services-analytics-impl:10.0.1
|    |    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    |    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    \--- com.google.android.gms:play-services-tagmanager-v4-impl:10.0.1
|         +--- com.google.android.gms:play-services-analytics-impl:10.0.1 (*)
|         +--- com.google.android.gms:play-services-base:10.0.1 (*)
|         \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-location:10.0.1
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
+--- com.google.firebase:firebase-core:10.0.1
|    \--- com.google.firebase:firebase-analytics:10.0.1
|         +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.firebase:firebase-common:10.0.1
|         |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
|         \--- com.google.firebase:firebase-analytics-impl:10.0.1
|              +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|              +--- com.google.firebase:firebase-iid:10.0.1
|              |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|              |    \--- com.google.firebase:firebase-common:10.0.1 (*)
|              \--- com.google.firebase:firebase-common:10.0.1 (*)
+--- com.google.firebase:firebase-ads:10.0.1
|    +--- com.google.android.gms:play-services-ads:10.0.1 (*)
|    \--- com.google.firebase:firebase-analytics:10.0.1 (*)
+--- com.squareup.picasso:picasso:2.5.2
\--- com.android.support:recyclerview-v7:23.3.0 (*)

(*) - dependencies omitted (listed previously)

die Fragen

  1. Was bedeutet die Abhängigkeitsbaumsyntax 'lib version -> different lib version'? Genauer gesagt, wenn der Baum "com.android.support:support-v4:23.3.0 -> 24.0.0" sagt, was bedeutet das?

  2. Wenn es implizite Anforderungen für die Bibliotheken von com.android.support Version 24.xx in einigen meiner anderen Abhängigkeiten gibt (siehe com.google.android.gms: play-services-basement: 10.0.1, abhängig von com.android.support:support -v4: 24.0.0), warum hat dieser build.gradle Fehler nicht vor dem bereits erwähnten Android Studio, Gradle Plugin und buildToolsVersion-Update ausgelöst?

  3. Wie kann ich sicherstellen, dass alle meine Abhängigkeiten mit compileSdkVersion 23 kompatibel sind?


6
2018-03-09 01:13


Ursprung


Antworten:


Genauer gesagt, wenn der Baum "com.android.support:support-v4:23.3.0 -> 24.0.0" sagt, was bedeutet das?

Es bedeutet, dass eine Bibliothek hat com.android.support:support-v4:23.3.0 als geschachtelte Dipendenz, aber Sie verwenden in diesem Fall nur eine andere und höhere Version der gleichen Abhängigkeiten com.android.support:support-v4:24.0.0.
Mit anderen Worten Ihr Projekt benutzt das com.android.support:support-v4:24.0.0

Warum hat dieser build.gradle-Fehler nicht vor dem bereits erwähnten Android Studio-, Gradle-Plugin- und buildToolsVersion-Update ausgelöst?

Weil Sie das Gradle-Plugin auf 3.3 aktualisiert haben, das diese Art von Überprüfung hat.

Wie kann ich sicherstellen, dass alle meine Abhängigkeiten mit compileSdkVersion 23 kompatibel sind?

Es ist ziemlich schwierig zu haben.
Der einzige Weg ist, alle Abhängigkeiten zu überprüfen, aber ich schlage vor, Sie verwenden:

compileSdkVersion 25
targetSdkVersion  23

Im Allgemeinen ist es eine gute Idee, die neueste Version von buildToolsVersion in jedem Fall unabhängig von der Version der verwendeten Support-Bibliotheken.

Außerdem. Es wird dringend empfohlen, dass Sie immer kompiliere mit dem neuesten SDK. Es bedeutet, dass Sie heute verwenden sollten compileSdkVersion 25.


6
2018-03-09 07:57