it-swarm.com.de

Wie löse ich alle Abhängigkeiten von Google Play-Services mit Gradle auf?

Situation

Heute, nachdem ich nichts von dem Projekt berührt hatte, schrie mich mein Schulabschluss an und wollte das Projekt nicht kompilieren. firebase-iid, firebase-common, play-services-analytics-impl, play-services-auth-api-phone und play-services-auth-base konnten nicht aufgelöst werden. Nach dem Wochenende also ziemlich durcheinander. 

Also habe ich die Versionen der verschiedenen APIs überprüft und die aktualisiert, für die ein Upgrade erforderlich war. Ich habe festgestellt, dass Google firebase-core eine obligatorische Abhängigkeit hinzugefügt hat. Anschließend wurde mein google-services-Plugin aktualisiert und sogar eine play-services-base-Abhängigkeit hinzugefügt. Ich habe auch firebase-messaging auf Version 17.0.0 und crashlytics auf Version 2.9.3 aktualisiert.

Der Build wird jedoch mit dieser Fehlermeldung nicht kompiliert:

Die Bibliothek com.google.Android.gms: play-services-Measurement-base wird von verschiedenen anderen Bibliotheken unter [[15.0.2,15.0.2], [15.0.4,15.0.4]] angefordert, wird aber aufgelöst 15.0.4. Deaktivieren Sie das Plugin und überprüfen Sie die Abhängigkeitsstruktur mithilfe von ./gradlew: app: Abhängigkeiten.

Gradle-Dateien

Hier ist meine Gradle-Datei (zeigt nur den Teil der Abhängigkeiten) nach meinen Versuchen:

apply plugin: 'com.Android.application'

...
dependencies {
    implementation project(':library')
    implementation project(':otherlibrary')
    implementation 'com.Android.volley:volley:1.1.0'
    implementation('org.Apache.httpcomponents:httpmime:4.3.6') {
        exclude module: 'httpclient'
    }
    implementation 'org.Apache.httpcomponents:httpclient-Android:4.3.5'
    implementation 'com.google.Android.gms:play-services-base:15.0.1'
    implementation 'com.google.Android.gms:play-services-analytics:15.0.2'
    implementation 'com.google.Android.gms:play-services-location:15.0.1'
    implementation('com.google.Android.gms:play-services-ads:15.0.1') {
        exclude group: 'com.Android.support', module: 'customtabs'
    }
    implementation 'com.google.Android.gms:play-services-identity:15.0.1'
    implementation 'com.google.Android.gms:play-services-auth:15.0.1'
    implementation 'com.google.Android.gms:play-services-drive:15.0.1'
    implementation 'com.google.firebase:firebase-core:16.0.0'
    implementation 'com.google.firebase:firebase-messaging:17.0.0'

    implementation 'com.Android.support:multidex:1.0.3'
    implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.nineoldandroids:library:2.4.0'
    implementation 'com.daimajia.slider:library:[email protected]'
    implementation 'com.Android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.Android.support:appcompat-v7:27.1.1'
    implementation 'com.Android.support:mediarouter-v7:27.1.1'
    implementation 'com.Android.support:support-v4:27.1.1'
    implementation 'com.Android.support:design:27.1.1'
    implementation 'com.Android.support:exifinterface:27.1.1'
    implementation 'com.Android.support:support-v13:27.1.1'
    // https://mvnrepository.com/artifact/com.darwinsys/hirondelle-date4j
    implementation group: 'com.darwinsys', name: 'hirondelle-date4j', version: '1.5.1'
    // For RxAndroid and RxJava
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 2.x.x version)
    implementation 'io.reactivex.rxjava2:rxjava:2.1.12'

    // Crashlytics
    implementation 'com.crashlytics.sdk.Android:crashlytics:2.9.3'

    // CSV with outputstream writer
    implementation 'com.opencsv:opencsv:4.1'

    // Gson
    implementation 'com.google.code.gson:gson:2.8.5'

    debugImplementation 'com.Android.support.test:runner:1.0.2'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.2'
    androidTestImplementation 'com.Android.support.test:rules:1.0.2'
    androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
    androidTestImplementation 'junit:junit:4.12'
}

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

Und mein projektweiter Gradle enthält folgende Zeilen:

...
repositories {
    maven {
       url 'https://maven.google.com/'
       name 'Google'
    }
    ...
}
dependencies {
    ...
    classpath 'com.google.gms:google-services:4.0.1'
}
...

Offizielle Lösung funktioniert nicht

Ich habe bereits versucht, die Versionsnummer mehrerer Bibliotheken gemäß der offiziellen Firebase-Dokumentation festzulegen, die mehr oder weniger der dieser Frage entspricht.
Wie Sie im offiziellen Dokumentationslink vom 2. Mai 2018 nachlesen können, boten sie eine Möglichkeit, dieses Problem zu beheben, aber die Nummern der fraglichen Versionen stimmen nicht überein, und ich habe das gegeben Fix (mit einigen Downgrades jetzt), ohne Erfolg.

Offizielle Dokumentation: Wenn Ihre App von com.google.firebase: firebase-core: 15.0.0 sowie einer der folgenden Bibliotheken abhängig ist:

com.google.Android.gms:play-services-analytics
com.google.Android.gms:play-services-appinvite
com.google.Android.gms:play-services-tagmanager
com.google.firebase:firebase-analytics
com.google.firebase:firebase-crash
com.google.firebase:firebase-dynamic-links
com.google.firebase:firebase-messaging

Sie müssen die Version der letzten Abhängigkeit auf .__ aktualisieren. 15.0.2. Dies behebt das Problem, bei dem Version 3.3.0 des Google Services Gradle-Plugins gemeldet wird: Die Bibliothek com.google.Android.gms: play-services-Measurement-Base wird von verschiedenen anderen Bibliotheken unter [[15.0.0, 15.0.0], .__ angefordert. [15.0.2,15.0.2]], aber bis 15.0.2 aufgelöst ...

Wie kann ich diese Versionskonflikte lösen, damit mein Build noch einmal korrekt kompiliert wird?

3
OroshiX

Nach einem in dieser Ausgabe verlorenen Tag fand ich heraus, dass die neueste Version von play-services-analyticsnicht die ist, die sie in ihrer Website veröffentlicht haben. Es ist 16.0.0 und nicht 15.0.2

Android Studio teilte dies einem Kollegen als Warnung mit, aber mir war das egal. Hier ist also die Linie, die alles verändert: 

implementation 'com.google.Android.gms:play-services-analytics:16.0.0'
2
OroshiX

Ich habe dies zu meinem build.gradle (Anwendungsversion) hinzugefügt und es hat funktioniert:

googleServices { disableVersionCheck = true }
1
Otziii

Ich habe versucht, zu einem alten Build zurückzukehren, und es schien zu funktionieren. Was ich fand, war, dass der gradle-wrapper.properties eine ältere Version (4.5) anstelle der 4.6, die ich im neueren Projekt hatte, verwendete. Dies zu ändern und von alpha15 zu classpath 'com.Android.tools.build:gradle:3.2.0-alpha08' zurückzukehren, schien den Trick zu haben. Ich denke, Sie können den Alpha 15 verwenden, wenn Sie möchten, aber um sicher zu sein, dass Sie den classpath 'com.Android.tools.build:gradle:3.1.2'..__ verwenden können, müssen neben all diesen Änderungen auch firebase-core und google-gms-services auf Version 16.0.0 gesetzt werden.

0
ZooMagic

Der Google Play-Dienst wurde leider gestoppt Diese Fenster werden generiert und es wird nie ein Google-Dienst ausgeführt

0