Не вдалося вирішити: com.google.android.gms: послуги відтворення в IntelliJ Idea за допомогою gradle


75

Я намагаюся додати служби google play до свого проекту libGDX в IntelliJ Idea. Я дотримувався посібника з налаштування тут: https://developers.google.com/android/guides/setup

що виглядає досить просто. Я щойно додав ці рядки до мого build.gradle у відповідному розділі, так що речі тепер виглядають так:

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

Потім я намагаюся синхронізувати свій проект gradle в Idea, лише щоб отримати помилку "Не вдалося вирішити".

Ну, у посібнику з налаштування також сказано: "Обов’язково оновлюйте цей номер версії кожного разу, коли оновлюються послуги Google Play", але проблема полягає в тому, що знайти цей номер версії здається майже неможливим: моя версія пакета SDK для служб Google Play відповідно до Android SDK manager - "43", і до цих пір мені не вдалося порівняти такий "11.2.0" або будь-який типовий рядок версії з номером версії "43". Не те, що в посібнику з налаштування про це нічого не сказано.

У будь-якому випадку, я спробував багато речей із безлічі пов'язаних з цим питань безрезультатно. Зокрема, я повинен зазначити, що я справді оновив свій SDK для Android, і я впевнений, що це той, який він використовує Idea (я вже тричі перевірив це ...):

Менеджер SDK для Android Структура проекту

Я використовую рівень API 26, але, як би там не було, інші дефініції використовують той самий каталог для Android SDK. Більше того, у мене НЕ встановлено жодного іншого пакета SDK для Android на цьому ноутбуці, тому немає сумнівів у тому, що Idea використовує цей і лише той.

Будь-які ідеї більш ніж вітаються.

Спасибі заздалегідь!


2
Не бачуapply plugin: 'com.google.gms.google-services'
Тім

Я також не бачу цього в посібнику Налаштування служб Google Play. Звідки це?
Fran Marzoa

JFTR, замінивши номер версії на 11.0.0 замість 11.2.0, схоже, робить трюк, але я все ще проводжу тестування тут, тому не буду публікувати це як відповідь, поки не переконаюсь у цьому.
Fran Marzoa


1
@Darush Файли build.gradle у проекті libGDX мають іншу структуру, ніж у стандартному проекті Android Studio. Зокрема, розділи "всі проекти" та "проект (: android)", згадані в моїй відповіді, не існують в останньому, і це правильне місце для розміщення цих речей на перших. Він також надає додаткову загальну інформацію, яка відсутня в іншій відповіді (наприклад, у документі журналу змін, в якому заснована вся відповідь), тому, проте, коли обидва рішення випливають з однієї і тієї ж проблеми, я не думаю, що це справжня обманка.
Fran Marzoa

Відповіді:


222

У мене виникла проблема, коли я ставив jcenter()раніше google()на рівні проекту build.gradle. Коли я змінив порядок і поставив google()раніше jcenter()в build.gradle, проблема зникла

Ось моя остання 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
Це спрацювало ... Але чому це питання з’явилося взагалі?
інший Високий хлопець

1
@PaulMathew: якби у мене було пояснення цієї проблеми / виправлення, я б розмістив його на пошті. Я "виявив" виправлення випадково під час боротьби з цією проблемою та тестування багатьох маніпуляцій.
Moussa,

1
Що це за чаклунство? Працює як шарм. Можливо, щось не так між цими 2 репо ... Ще один, хто хоче знати пояснення.
Pl4yeR

Однією з причин може бути наступна: спершу він намагається знайти наступне репо на jcenter (), знаходить приватне або невдале з будь-яких інших причин і повертає вам помилку. Потім, якщо ви поставите "google ()" зверху, він спочатку виглядає в google repo, і лише потім (якщо нічого не знайдено) він переходить у jcenter.
А. Казаровець

Я так сумую за Eclipse, оскільки, здається, Android Studio я витрачаю стільки часу на “виправлення” gradle, скільки на програмування
Мартін Белчер - AtWrk

82

Я просто замінив версію 11.2.0 на 11.0.0, і тоді вона, здавалося, працювала нормально, тож це мало означати, що 11.2.0 не був включений до останнього Android SDK.

Отже, після боротьби з усією доступною розкиданою документацією, я випадково дійшов до цього документа (гадаю, він недостатньо індексований Google): https://developers.google.com/android/guides/releases

Я цитую звідти:

Основні моменти випуску служб Google Play 11.2. Залежності від служб Google Play тепер доступні через maven.google.com

Тепер, навіть коли це не обов’язково означає, що вони вже недоступні із завантаженим SDK, схоже, це насправді так.

У будь-якому випадку, додавання google () до мого build.gradle не спрацювало (не знайдено, не визначено чи що інше ...), тому я використав інший підхід, який я знайшов у цьому документі з посиланням на попередній:

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

Я змінив свій файл build.gradle, додавши цей рядок до всіх проектів / сховищ, як у:

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

А потім також у розділі android у тому ж файлі build.gradle:

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

Цих двох рядків було достатньо, щоб Gradle без проблем синхронізувався. Мені не потрібно було додавати будь-які плагіни, крім тих, які вже додані до мого проекту libGDX за замовчуванням.

Після цього я отримав кілька різних помилок, але жодної щодо Gradle чи залежностей. Коротко, JFTR:

По-перше, у мене була версія minSdkVersion 8. Вирішено, піднявши її до 14. Я думаю, я міг би жити, не підтримуючи всі ці пристрої нижче 14.

По-друге, у мене були проблеми з верхньою межею посилань dex. Я ніколи раніше не стикався з цією проблемою, але, можливо, ви вже помітили рішення, яке я використав: замість того, щоб складати цілий 'com.google.android.gms: play-services', я використовував лише 'com.google.android.gms : play-services-ads 'це API, який мене насправді зараз цікавить. Для інших конкретних випадків, коли таке рішення не може бути корисним, цей документ може надати кращу інформацію: https://developer.android.com/studio/build/multidex.html

По-третє, навіть після цього я отримав цю проблему "джамбо", описану та відповіну тут: https://stackoverflow.com/a/26248495/1160360

І це все. На сьогодні все будується, і моя гра нарешті показує ці банери Admob.

Я витратив на це години роздумів, що змушує мене задуматися, чи всі ці системи автоматизації будівель, які ми використовуємо останнім часом, варті того додаткового навантаження, яке вони додають.

Я маю на увазі, що вперше, коли мені довелося додати Admob до програми п’ять років тому, я просто повинен був завантажити файл .jar і помістити його в каталог у своєму проекті. Це було досить очевидно, і весь процес, від гуглиння "як налаштувати Admob у моєму проекті для android", щоб мій додаток із банером Admob зайняв у мене всього кілька хвилин. Я залишу це тут, оскільки тут не місце для такого роду дебатів.

Тим не менше, я сподіваюся, що мій власний досвід буде корисний для когось іншого.


6
У мене таке відчуття, що це буде добре відвідана відповідь протягом наступних кількох тижнів.

2
Фантастична відповідь. Дякую!
Mark Whitaker

1
Дякую @Fran ... ти заощаджуєш терміни
Mushroomzier

4
Це відмінна відповідь: виправлення, документація, виправлення інших проблем. Просто дозвольте мені додати , що з однієї пов'язаної сторінки вони оновлюються maven { url "https://maven.google.com/"}з google(). Рядок maven є обов’язковим для нижчих версій Gradle [тобто нижче Gradle 4.1]. Будьмо, друже!
Антоніно

У вас є якісь - або ідеї , чому ви повинні поставити залежність прямого РЕПО на рівні верхнього build.gradleфайлу , allprojects{ repositories{...}}а не в модулі конкретного файлу збірки, наприклад , app/build.gradle«s repositories?
stan0

17

Додайте це у build.gradleфайл на рівні проекту :

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

У мене це спрацювало


Будь ласка, прочитайте попередні відповіді перед публікацією власних.
Fran Marzoa

@Fran Ohooo Вибачте!
zsubzwary

14

Я намагався вирішити цю проблему годинами після того, як деякий час не користувався Android Studio і не знав про оновлення.

Важливо, що google()це перший елемент, який стоїть repositoriesтак:

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

Якось google()був другим пунктом після jcenter(), тому все було зіпсовано і не працювало. Можливо, це комусь допомагає.


11

SDK служб Google Play знаходиться всередині Google Repository.

  1. Запустіть Intellij IDEA.

  2. У меню Інструменти натисніть Android> Диспетчер SDK.

  3. Оновіть менеджер SDK для Android: натисніть Інструменти SDK , розгорніть сховище підтримки , виберіть Google Repository , а потім натисніть кнопку OK.

Поточна версія сховища Google - 57.

Після оновлення синхронізуйте свій проект.

РЕДАГУВАТИ

Починаючи з версії 11.2.0, ми повинні використовувати репо google maven, тому додаємо репо посилання google maven у тег сховищ. Перевірте примітку до випуску звідси .

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

Google Repository вже встановлено. Я збираюся додати знімок екрана з цим теж.
Fran Marzoa

можливо, ви вказуєте неправильний SDK. Перевірте це у меню Файл> Структура проекту та переконайтесь, що ви отримали правильний SDK.
Абхішек Арій

Цитуючи себе з запитання: "Я маю зазначити, що я справді оновив свій Android SDK належним чином, і я впевнений, що це той, який він використовує Idea (я вже тричі перевіряв це ...)". Я збираюся додати ще один знімок екрана, щоб уникнути подальшої плутанини, і тому ніхто не повинен
вірити

Це неправильно. З 11.2.0 ви повинні використовувати репо google maven
Габріеле Маріотті


4

Найпізніше Google Play Services 15.0.0ця помилка виникає, коли ви включаєте цілий сервіс відтворення, як цей

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

Натомість ви повинні вказати детальну послугу, наприклад Google Drive

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

На сьогодні остання версія - 17.1.0
Еммануель Конраді

4

Я знайшов таке рішення для заміни наступного коду

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

Для мене це прекрасно працює


2

Перевірте налаштування градації, для нього може бути встановлено режим роботи в автономному режимі


1

Я також отримав цю помилку, але з іншої причини. Виявляється, я зробив помилку, коли намагався вказати номер версії як змінну:

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

Я визначив змінну playServices у gradle.properties у кореневому каталозі мого проекту:

playServices=15.0.1

Помилка була така, {$playServices}що слід було сказати ${playServices}так:

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

Це вирішило проблему для мене.


0

У мене була така проблема. І я знайшов це рішення. В Android Studio відкрийте меню «Файл» і перейдіть до «Структура проекту», у програмі «Модуль» перейдіть на вкладку залежностей, і ви можете додати «com.google.android.gms: play-services: xxx», натиснувши кнопку +.


0

ймовірно, мова йде про те, що ви не ввели правильну версію залежності. Ви можете вибрати правильну залежність з цього:

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

якщо не можете знайти ваші потреби, вам слід оновити ваш sdk знизу:

tools> android> sdk manager> sdk update> виберіть будь-що, що вам потрібно> добре


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.