Дублируемая запись: com/google/firebase/FirebaseApiNotAvailableException.class

У меня есть проект Android, созданный с помощью React-Native и использующий сервисы Google Play (аналитика, облачные сообщения, реклама). Я не использую Firebase в любом месте.

Попробовал обновление Служб Службы с 8.4.0 = > 9.2.0. Также обновлен путь к классам GPS.

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:3.0.0'

...

dependencies {
    compile 'com.google.android.gms:play-services-analytics:9.2.1'
    compile 'com.google.android.gms:play-services-ads:9.2.1'
    compile 'com.google.android.gms:play-services-base:9.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.2.1'

Обратите внимание, что я не могу в явной зависимости от Firebase.

С момента обновления я получаю следующую ошибку Gradle build:

com.android.build.api.transform.TransformException: java.util.zip.ZipException: дублирующаяся запись: com/google/firebase/FirebaseApiNotAvailableException.class

Я знаю, что Firebase входит в сервисы Google Play (с 9.0), поэтому я решил, что что-то еще компилирует и связывает с более старыми версия. Поэтому, глядя на понимание зависимостей (gradle -q dependencyInsight --configuration compile --dependency firebase), я заметил, что firebase-common 9.0.0 добавляется поверх 9.2.1:

введите описание изображения здесь

Но я не могу для жизни меня узнать, что вызывает это.

Ответ 1

Хорошо - виновник - Реагент-Родной.

Подсказка была этой неясной строкой, которая появляется на консоли Gradle:

Плагин google-services не смог обнаружить какую-либо версию для com.google.android.gms или com.google.firebase, версия по умолчанию: 9.0.0 будет использоваться.

Исправить? Заставьте проект библиотеки RN связать с правильной версией Firebase, добавив следующую строку в свой build.gradle:

compile 'com.google.firebase:firebase-core:9.2.1'

И таким образом:

введите описание изображения здесь

В качестве побочной заметки эта проблема заставила меня глубже заглянуть в управление зависимостями Gradle. Я написал обширное сообщение об устранении общих проблем с зависимостями.

Ответ 2

Проблема заключается в том, что вы используете оба плагина в файле build.gradle поэтому удалите один плагин Google Play Services, например

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

и

compile 'com.google.android.gms:play-services:11.0.2'

Итак, удалите обе библиотеки, а затем добавьте

packagingOptions {
    exclude 'META-INF/NOTICE' // It is not include NOTICE file
    exclude 'META-INF/LICENSE' // It is not include LICENSE file
}

Ответ 3

В моем случае я использовал это в app/build.gradle:

compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.android.gms:play-services-maps:9.8.0'

Ошибка при попытке создания подписанного APK была:

Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class

Я модифицировал app/build.gradle, удалив две строки, упомянутые выше, и вместо этого:

compile 'com.google.android.gms:play-services:9.8.0'

Конечно, "игровые сервисы" - это полный комплект, а не оптимизированный способ сделать это. Лучше всего указать конкретные сервисы, которые требуются (читайте Есть ли "игровые сервисы: 9.8.0" включить "play-services-location-9.8.0" ?), но на данный момент он исправляет ошибку в моем случае.

Ответ 4

java.util.zip.ZipException: дублирующаяся запись: com/google/firebase/iid/zzb.class

следуйте этой работе. Удалите текущую зависимость службы Google Play и перейдите в файл в настройке модуля выбора Android и выберите вкладку зависимости, нажмите на значок + и выберите зависимость lib после этого поиска в игровой службе в студии и добавьте ее