多个dex文件定义Lcom/google/firebase/FirebaseException

Mar*_*hov 23 android gradle firebase build.gradle android-gradle-plugin

我遇到了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
}
Run Code Online (Sandbox Code Playgroud)

和模块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'
Run Code Online (Sandbox Code Playgroud)

在项目构建期间,我收到错误:

错误:将字节码转换为dex时出错:原因:com.android.dex.DexException:多个dex文件定义Lcom/google/firebase/FirebaseException;

错误原因很明显,但我没有编译任何库两次.我应该FirebaseException手动从构建过程中排除类吗?如果是这样,怎么样?也许这是Firebase依赖项中的一个错误?

谢谢.

mp3*_*415 13

我有react-native-google-signin模块这个问题.由于指令如何修改build.gradle通常不是最新的,不完整的或仅在多个不相关的项目中定义,项目仅在从react-native-google-signin示例项目复制设置后编译.事实证明,语句的顺序和exclude group命令都很重要.最终结果如下(in 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'
Run Code Online (Sandbox Code Playgroud)

顶部像往常一样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'
    }
}
Run Code Online (Sandbox Code Playgroud)

完成这些更改后,没有任何Multiple dex错误.

  • 对react-native-push-notification库也有这个问题 (3认同)

Kas*_*chi 5

FireBase 是一个庞大的库,因此您需要在您的应用程序中启用多索引支持。

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
}
Run Code Online (Sandbox Code Playgroud)


Den*_*hev 3

看起来您已达到方法计数限制。尝试删除firebase依赖项并检查应用程序的方法计数(例如,使用此 gradle 插件(如果不删除这些依赖项,您将根本无法构建项目,因此,要使用方法计数插件) 。

Firebase是一个巨大的库- 超过 17k 个方法。这取决于很多东西。您可以做的一件事是通过单击“methodscount.com”上的此按钮来检查依赖项列表: 在此输入图像描述

如果您的项目中已经有其中一些,您可以尝试排除它们:

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

如果这没有帮助,那么您可能需要为您的项目配置 multidex