Fehler beim Auflösen: com.google.android.gms: Wiedergabedienste in IntelliJ Idea mit gradle


75

Ich versuche, meinem libGDX-Projekt in IntelliJ Idea Google Play-Dienste hinzuzufügen. Ich habe die Installationsanleitung hier befolgt: https://developers.google.com/android/guides/setup

das sieht ziemlich einfach aus. Ich habe diese Zeilen gerade zu meinem build.gradle im entsprechenden Abschnitt hinzugefügt, sodass die Dinge jetzt so aussehen:

project(":android") {
    apply plugin: "android"
    apply plugin: 'com.android.application'

    configurations { natives }

    dependencies {
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
        compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
        compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
        compile 'com.google.android.gms:play-services:11.2.0'
    }
}

Dann versuche ich, mein Gradle-Projekt in Idea zu synchronisieren, um den Fehler "Fehler beim Auflösen" zu erhalten.

In der Installationsanleitung heißt es außerdem: "Stellen Sie sicher, dass Sie diese Versionsnummer jedes Mal aktualisieren, wenn die Google Play-Dienste aktualisiert werden." Das Problem ist jedoch, dass es fast unmöglich ist, diese Versionsnummer zu finden: meine Google Play Services SDK-Version gemäß Android SDK Manager ist "43", und bisher konnte ich solche "11.2.0" oder eine typische Versionszeichenfolge nicht mit der Versionsnummer "43" korrelieren. Nicht, dass die Installationsanleitung nichts dazu aussagt.

Wie auch immer, ich habe viele Dinge aus der Fülle der damit zusammenhängenden Fragen ohne Erfolg ausprobiert. Insbesondere muss ich darauf hinweisen, dass mein Android SDK ordnungsgemäß aktualisiert wurde und ich bin sicher, dass es das ist, das von Idea verwendet wird (ich habe dies bereits dreimal überprüft ...):

Android SDK Manager Projektstruktur

Ich verwende die API-Stufe 26, aber die anderen Definitionen verwenden dasselbe Verzeichnis für das Android SDK. Außerdem habe ich KEIN anderes Android SDK in diesem Laptop installiert, so dass es keine Frage gibt, ob Idea dieses und nur dieses verwendet.

Ideen sind mehr als willkommen.

Danke im Voraus!


2
Ich sehe nichtapply plugin: 'com.google.gms.google-services'
Tim

Ich sehe es auch nicht im Handbuch zum Einrichten von Google Play Services. Woher kommt das?
Fran Marzoa

JFTR, das Ersetzen der Versionsnummer durch 11.0.0 anstelle von 11.2.0 scheint den Trick zu tun, aber ich mache hier noch einige Tests, sodass ich sie erst als Antwort veröffentlichen werde, wenn ich mir sicher bin.
Fran Marzoa


1
@Darush Die build.gradle-Dateien in einem libGDX-Projekt haben eine andere Struktur als die in einem Standard-Android Studio-Projekt. Insbesondere die in meiner Antwort erwähnten Abschnitte "allprojects" und "project (: android)" existieren im letzten nicht und es ist der richtige Ort, um diese Dinge auf das erstere zu setzen. Es enthält auch zusätzliche allgemeine Informationen, die in der anderen Antwort fehlen (wie das Änderungsprotokolldokument, in dem die gesamte Antwort basiert). Wenn also beide Lösungen aus demselben Problem resultieren, halte ich es nicht für einen echten Betrug.
Fran Marzoa

Antworten:


221

Ich hatte das Problem, als ich es jcenter()zuvor google()in build.gradle auf Projektebene eingefügt habe. Als ich die Reihenfolge geändert und google()zuvor jcenter()in build.gradle eingefügt habe, ist das Problem verschwunden

Hier ist mein letztes build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'


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

1
Es hat funktioniert ... Aber warum kam dieses Problem überhaupt?
andere große Kerl

1
@PaulMathew: Wenn ich die Erklärung für dieses Problem / diesen Fix hätte, hätte ich sie auf den Post gesetzt. Ich habe das Update zufällig "entdeckt", als ich mit diesem Problem zu kämpfen hatte und viele Manipulationen getestet habe.
Moussa

1
Was ist das für eine Zauberei? Klappt wunderbar. Vielleicht stimmt etwas zwischen diesen beiden Repos nicht ... Ein anderer, der die Erklärung wissen will.
Pl4yeR

Einer der Gründe könnte folgender sein: Es versucht zuerst, folgendes Repo auf jcenter () zu finden, findet eines, das privat ist oder aus einem anderen Grund fehlschlägt, und gibt einen Fehler an Sie zurück. Wenn Sie dann "google ()" oben platzieren, wird zuerst auf Google Repo gesucht und erst dann (wenn nichts gefunden wird) wird es an jcenter gesendet.
A. Kazarovets

Ich vermisse Eclipse so sehr, seit Android Studio habe ich anscheinend genauso viel Zeit damit verbracht, Gradle zu reparieren wie Programmieren
Martin Belcher - AtWrk

82

Ich habe gerade Version 11.2.0 durch 11.0.0 ersetzt und dann schien es gut zu funktionieren, was bedeuten musste, dass 11.2.0 nicht im neuesten Android SDK enthalten war.

Nachdem ich mit der gesamten verfügbaren verstreuten Dokumentation zu kämpfen hatte, gelangte ich zufällig zu diesem Dokument (ich denke, es wird von Google nicht hoch genug indiziert): https://developers.google.com/android/guides/releases

Ich zitiere von dort:

Highlights aus der Version 11.2 von Google Play Services. Abhängigkeiten von Google Play-Diensten sind jetzt über maven.google.com verfügbar

Selbst wenn dies nicht unbedingt bedeuten sollte, dass sie mit dem heruntergeladenen SDK nicht mehr verfügbar sind, scheint dies tatsächlich der Fall zu sein.

Wie auch immer, das Hinzufügen von google () zu meinem build.gradle hat nicht funktioniert (nicht gefunden, undefiniert oder was auch immer ...), daher habe ich einen anderen Ansatz verwendet, den ich in diesem Dokument gefunden habe, auf den vom vorherigen verwiesen wurde:

https://developer.android.com/studio/build/dependencies.html#google-maven

Ich habe meine build.gradle-Datei geändert und diese Zeile zu allprojects / repositories hinzugefügt, wie in:

allprojects {
...
    repositories {
...
        maven { url "https://maven.google.com/"}
    }
}

Und dann auch im Android-Bereich in derselben build.gradle-Datei:

project(":android") {
...
    dependencies {
...
        compile 'com.google.android.gms:play-services-ads:11.2.0'
    }
}

Diese beiden Zeilen reichten aus, um Gradle problemlos synchronisieren zu können. Ich musste keine Plugins hinzufügen, außer denen, die standardmäßig bereits in meinem libGDX-Projekt hinzugefügt wurden.

Danach habe ich ein paar verschiedene Fehler bekommen, aber keine über Gradle oder Abhängigkeiten. Kurz gesagt, JFTR:

Zuerst hatte ich eine minSdkVersion von 8. Gelöst durch Erhöhen auf 14. Ich denke, ich könnte leben, ohne all diese Geräte unter 14 zu unterstützen.

Zweitens hatte ich Probleme mit der Dex-Obergrenze der Referenzen. Ich habe dieses Problem noch nie zuvor gesehen, aber vielleicht haben Sie bereits die Lösung bemerkt, die ich verwendet habe: Anstatt das gesamte "com.google.android.gms: play-services" zu kompilieren, habe ich nur "com.google.android.gms" verwendet : play-services-ads 'das ist die API, die mich gerade interessiert. In anderen Fällen, in denen eine solche Lösung möglicherweise nicht hilfreich ist, bietet dieses Dokument möglicherweise einen besseren Einblick: https://developer.android.com/studio/build/multidex.html

Drittens habe ich auch danach dieses "Jumbo" -Problem hier beschrieben und beantwortet: https://stackoverflow.com/a/26248495/1160360

Und das ist es. Ab sofort baut sich alles auf und mein Spiel zeigt endlich diese Admob-Banner.

Ich habe Stunden damit verbracht, dachte ich, was mich fragt, ob all diese Gebäudeautomationssysteme, die wir in letzter Zeit verwenden, die zusätzliche Last wert sind, die sie hinzufügen.

Ich meine, als ich Admob vor ungefähr fünf Jahren zum ersten Mal zu einer App hinzufügen musste, musste ich nur eine JAR-Datei herunterladen und in ein Verzeichnis in meinem Projekt stellen. Es war ziemlich offensichtlich und der gesamte Prozess, vom Googeln "Einrichten von Admob in meinem Android-Projekt" bis zur Anzeige eines Admob-Banners in meiner App, dauerte nur wenige Minuten. Ich werde es hier lassen, da dies nicht der Ort für eine solche Debatte ist.

Trotzdem hoffe ich, dass meine eigene Erfahrung für jemand anderen nützlich ist.


6
Ich habe das Gefühl, dass diese Antwort in den nächsten Wochen gut besucht sein wird.

2
Fantastische Antwort. Vielen Dank!
Mark Whitaker

1
Danke @Fran ... Sie sparen Termine
Mushroomzier

4
Dies ist eine hervorragende Antwort: Korrektur, Dokumentation, andere Problemkorrekturen. Lassen Sie mich nur hinzufügen , dass von der gleichen Seite verlinkt sie aktualisiert maven { url "https://maven.google.com/"}zu google(). Die Maven-Linie ist für Versionen mit niedrigerem Gradle obligatorisch [dh niedriger als Gradle 4.1]. Prost Kumpel!
Antonino

Haben Sie eine Idee, warum Sie die Repo-Abhängigkeit in die build.gradleDateien der obersten Ebene allprojects{ repositories{...}}anstatt in die modulspezifische Build-Datei, z. B. app/build.gradle, einfügen müssen repositories?
stan0

17

Fügen Sie dies Ihrer build.gradleDatei auf Projektebene hinzu :

repositories {
    maven {
        url "https://maven.google.com"
    }
}

Es hat bei mir funktioniert


Bitte lesen Sie die vorherigen Antworten, bevor Sie Ihre eigenen veröffentlichen.
Fran Marzoa

@Fran Ohooo Entschuldigung!
Zsubzwary

14

Ich habe stundenlang versucht, dieses Problem zu lösen, nachdem ich Android Studio einige Zeit nicht verwendet hatte und die Updates nicht kannte.

Es ist wichtig, dass dies google()der erste Punkt ist, der so steht repositories:

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

Irgendwie google()war der zweite Punkt danach jcenter(), also war alles durcheinander und funktionierte nicht. Vielleicht hilft das jemandem.


11

Das Google Play Services SDK befindet sich im Inneren Google Repository.

  1. Starten Sie Intellij IDEA.

  2. Klicken Sie im Menü Extras auf Android> SDK Manager.

  3. Aktualisieren Sie den Android SDK Manager: Klicken Sie auf SDK Tools , erweitern Sie Support Repository , wählen Sie Google Repository aus und klicken Sie dann auf OK.

Die aktuelle Version des Google Repository ist 57.

Nach dem Update synchronisieren Sie Ihr Projekt.

BEARBEITEN

Ab Version 11.2.0müssen wir das Google Maven Repo verwenden, also fügen Sie den Google Maven Repo Link in das Repositories-Tag ein. Überprüfen Sie den Versionshinweis von hier .

allprojects {
     ..
     repositories {
     ...
        maven {
            url 'https://maven.google.com'
            // Alternative URL is 'https://dl.google.com/dl/android/maven2/'
        }
     }
}

Google Repository ist bereits installiert. Ich werde auch damit einen Screenshot hinzufügen.
Fran Marzoa

Vielleicht zeigen Sie auf das falsche SDK. Überprüfen Sie es unter Datei> ProjectStructure und stellen Sie sicher, dass Sie das richtige SDK haben.
Abhishek Aryan

Ich zitiere mich aus der Frage: "Ich muss darauf hinweisen, dass mein Android SDK ordnungsgemäß aktualisiert wurde und ich bin sicher, dass es das ist, das von Idea verwendet wird (ich habe dies bereits dreimal überprüft ...)." Ich werde einen weiteren Screenshot hinzufügen, um weitere Verwirrung zu vermeiden, und deshalb muss niemand mein Wort dazu nehmen ...
Fran Marzoa

Es ist nicht richtig. Mit dem 11.2.0 müssen Sie das Google Maven Repo verwenden
Gabriele Mariotti


4

Ich habe folgende Lösung gefunden, um folgenden Code zu ersetzen

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath 'com.google.gms:google-services:3.2.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
}

Es funktioniert gut für mich


3

Spätestens Google Play Services 15.0.0dann tritt dieser Fehler auf, wenn Sie den gesamten Spieldienst wie diesen einbinden

implementation 'com.google.android.gms:play‐services:15.0.0'

Stattdessen müssen Sie den Detailservice wie angeben Google Drive

com.google.android.gms:play-services-drive:15.0.0

2

Überprüfen Sie Ihre Gradle-Einstellungen. Möglicherweise ist sie auf Offline-Arbeit eingestellt


1

Ich habe diesen Fehler auch bekommen, aber aus einem anderen Grund. Es stellte sich heraus, dass ich einen Tippfehler gemacht hatte, als ich versuchte, die Versionsnummer als Variable anzugeben:

dependencies {
    // ...
    implementation "com.google.android.gms:play-services-location:{$playServices}"
    // ...
}

Ich hatte die Variable playServices in gradle.properties im Stammverzeichnis meines Projekts definiert:

playServices=15.0.1

Der Tippfehler war, {$playServices}der so hätte sagen sollen ${playServices}:

dependencies {
    // ...
    implementation "com.google.android.gms:play-services-location:${playServices}"
    // ...
}

Das hat das Problem für mich behoben.


0

Ich hatte dieses Problem. Und ich fand das lösen. Öffnen Sie in Android Studio das Menü Datei und gehen Sie zu Projektstruktur. In der Modul-App wechseln Sie zur Registerkarte Abhängigkeiten. Sie können 'com.google.android.gms: play-services: xxx' hinzufügen, indem Sie auf die Schaltfläche + klicken.


0

Hier geht es wahrscheinlich darum, dass Sie nicht die richtige Abhängigkeitsversion eingegeben haben. Sie können die richtige Abhängigkeit daraus auswählen:

file>menu>project structure>app>dependencies>+>Library Dependency>select any thing you need > OK

Wenn Sie Ihre Anforderungen nicht finden können, sollten Sie Ihr SDK von unten aktualisieren:

tools> android> sdk manager> sdk update> wähle alles was du brauchst> ok


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.