web-dev-qa-db-ja.com

重複するエントリ:com / google / firebase / FirebaseApiNotAvailableException.class

私はAndroidプロジェクトがReact-Nativeで構築され、Google Play開発者サービス(分析、クラウドメッセージング、広告)を採用しています。Firebaseを明示的に使用していません。

Playサービスを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ビルドエラーが発生しています。

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の上に追加されていることに気づきました:

enter image description here

しかし、私はこれが原因を突き止めることができません。

10
Vaiden

まあ-犯人はリアクトネイティブです。

ヒントは、Gradleコンソールに表示される次のあいまいな行でした。

google-servicesプラグインは、com.google.Android.gmsまたはcom.google.firebaseのバージョンを検出できませんでした。デフォルトバージョン:9.0.0が使用されます。

修正? build.gradleに次の行を追加して、RNライブラリプロジェクトを正しいFirebaseバージョンにリンクさせます。

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

したがって:

enter image description here

余談ですが、この問題により、私はGradleの依存関係の管理についてさらに深く検討するようになりました。 一般的な依存関係の問題の解決に関する広範な投稿 を作成しました。

23
Vaiden

問題は、build.gradleファイルで両方のプラグインを使用するため、次のような1つのGoogle Play Servicesプラグインを削除することです。

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

そして

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

したがって、1つのライブラリの両方を削除してから追加します

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

Java.util.Zip.ZipException:重複するエントリ:com/google/firebase/iid/zzb.class

これに従ってください。現在のGoogle Playサービスの依存関係を削除し、Android= Studioのモジュール選択設定と依存関係の選択タブでファイルに移動してください。スタジオでのサービスと追加

0
AMIT RANJAN

私の場合、私はこれを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

上記の2行を削除してapp/build.gradleを変更し、代わりにこれを使用しました。

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

もちろん、「play-services」は完全なバンドルであり、これを行うための最適化された方法ではありません。必要な特定のサービスを指定することをお勧めします(read Does "play-services:9.8.0" include "play-services-location:9.8.0"? )が、今のところは私の場合はエラーを修正します。

0
Jaime Montoya