web-dev-qa-db-ja.com

複数のdexファイルがLcom / google / firebase / FirebaseExceptionを定義します

Firebase統合で問題が発生しました。まず、ルートレベルのbuild.gradleファイルにルールを追加しました。

buildscript {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

そして、モジュールGradleファイル:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 24
    buildToolsVersion "24"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 2
        versionName "0.9"
    }
    buildTypes {
       ///
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.google.firebase:firebase-core:9.0.2'
    compile 'com.google.firebase:firebase-crash:9.0.2'
}

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

プロジェクトのビルド中に、次のエラーが表示されます。

エラー:バイトコードのdexへの変換エラー:原因:com.Android.dex.DexException:複数のdexファイルがLcom/google/firebase/FirebaseExceptionを定義しています。

エラーの理由は明らかですが、ライブラリを2回コンパイルしませんでした。 FirebaseExceptionクラスをビルドプロセスから手動で除外する必要がありますか?もしそうなら、どのように?おそらくこれはFirebase依存関係内のバグでしょうか?

ありがとう。

23
Mark Korzhov

react-native-google-signinモジュールでこの問題が発生しました。 build.gradleを変更する手順は、最新ではないか、不完全であるか、複数の無関係なプロジェクトで定義されていることが多いため、プロジェクトはreact-native-google-signinサンプルプロジェクトから設定をコピーした後にのみコンパイルされます。 exclude groupコマンドと同様に、ステートメントの順序も重要であることがわかります。最終結果は次のようになりました(app/build.gradle):

dependencies {
    ...
    compile 'com.google.Android.gms:play-services-auth:9.2.1'
    compile(project(":react-native-google-signin")) {
        exclude group: "com.google.Android.gms"
    }   
}

task copyDownloadableDepsToLibs(type: Copy) {
   from configurations.compile
   into 'libs'
}

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

上のbuild.gradleには、通常どおり追加のgmsクラスパスが含まれています。

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.2.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

これらの変更のビルドがMultiple dexエラーなしで終了した後。

13
mp31415

FireBaseは巨大なライブラリなので、アプリケーションでmultidexサポートを有効にする必要があります。

dependencies {
    compile ('com.google.firebase:firebase-core:9.0.2') {
        exclude module: 'play-services-base'
        exclude module: 'support-v4'
        exclude module: 'support-annotations'
    }
    compile 'com.Android.support:multidex:1.0.1'
}

defaultConfig {
        // Enabling multidex support.
        multiDexEnabled true
}
4

methods count limit に到達したようです。 firebase依存関係を削除し、アプリのメソッド数を確認してください(たとえば、 this gradle plugin (これらの依存関係を削除しないと、ビルドできませんしたがって、メソッドカウントプラグインを使用するようにプロジェクトを作成します)。

Firebase 巨大なライブラリです -17k +メソッド。それはたくさんのものに依存します。できることの1つは、「methodscount.com」でこのボタンをクリックして依存関係リストを確認することです。 enter image description here

プロジェクトにこれらの一部が既にある場合、それらを除外してみることができます。

compile ('com.google.firebase:firebase-core:9.0.2') {
    exclude module: 'play-services-base'
    exclude module: 'support-v4'
    exclude module: 'support-annotations'
}

これで解決しない場合は、プロジェクトで configure multidex を使用することをお勧めします。

3
Denis Kniazhev

react-native-mapsおよびreact-native-google-signin。を使用しています

そして、私は複数のdexファイルがLcom/google/firebase/FirebaseExceptionを定義する

解決策を以下に示します。

Build.gradleを開きます(react-native-maps)

dependencies {
     provided "com.facebook.react:react-native:+"
     compile "com.google.Android.gms:play-services-base:10.2.4"
     compile "com.google.Android.gms:play-services-maps:10.2.4"
}

バージョンは10.2.4です

Build.gradle(react-native-google-signin)を引き続き開きます

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile "com.Android.support:appcompat-v7:23.0.1"
    compile 'com.google.Android.gms:play-services-auth:9.2.1' <- change here
    compile "com.facebook.react:react-native:+"
}

バージョン9.2.1を使用しており、これが理由です。

バージョン10.2.4に変更すると

compile 'com.google.Android.gms:play-services-auth:10.2.4'

次に、build.gradle(アプリ)を開き、新しいものを追加します

compile 'com.google.Android.gms:play-services-auth:10.2.4'

今、あなたは持っています。

compile 'com.google.Android.gms:play-services-auth:10.2.4'
compile(project(":react-native-google-signin")){
    exclude group: "com.google.Android.gms" 
}

コマンドcd Android & gradlew clean & cd .. util no errorを実行してから、react-native run-Androidを実行します。希望が助けられる。

1
Tuan Nguyen

それが誰かを助ける場合、私は同様の問題にぶつかっていました、それはFirebaseと競合する依存関係をもたらすGoogleサービスのGradleプラグインによって引き起こされました。

私が持っていたbuild.gradleのトップレベルでは、buildscriptで:

classpath 'com.google.gms:google-services:3.0.0'

私のアプリのbuild.gradleで、競合する依存関係を(自動的に)もたらしていました:

compile 'com.firebaseui:firebase-ui-auth:2.2.0'

コンパイルの依存関係が1つしかなく、混乱を招く可能性のあるものに頭を悩ませていたため、少し混乱しました。

Google-services gradleプラグインを削除し、問題を解決しました。私はちょうど正しいバージョンを見つけることもできると思います:)

1
zedix

これは、一部のライブラリが他のライブラリの異なるバージョンを使用しているためです。

最後に追加したライブラリをチェックアウトして除外します。私のプロジェクトでは、「react-native-firestack」でした。

compile(project(':react-native-firestack')){
     exclude group: "com.google.Android.gms" // very important
}
0
MultiGameguard

Firebase-ui:2.0.0を使用しているときにこのエラーが発生しました。私は'com.firebaseui:firebase-ui:1.2.0'にダウングレードすることでそれを解決し、プロジェクトレベルbuild.gradleに次の行を追加しました。

allprojects {
    repositories {
        jcenter()

        // Add the following
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
}
0
Darush

この投稿 のおかげで、Googleの依存関係のバージョンを確認して、最新リリースにアップグレードするだけです。

問題を解決できました。問題は、BaseGameUtilsが古いバージョンのplay-servicesをまだ使用/参照していることでした。正しいバージョンが追加され、現在は機能しています。次のプロジェクトではBaseGameUtilsを省略します。

0
Pablo Cegarra