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

时间:2016-07-04 19:28:01

标签: android gradle firebase android-gradle build.gradle

我遇到了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 /谷歌/火力/ FirebaseException;

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

感谢。

9 个答案:

答案 0 :(得分:13)

我在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错误。

答案 1 :(得分:4)

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
}

答案 2 :(得分:3)

您似乎已达到methods count limit。尝试删除firebase个依赖关系并检查您的应用的方法计数(例如,使用this gradle plugin(如果您不删除这些依赖关系,您将无法在以下位置构建项目)所以,所以,使用方法count plugin)。

Firebase is a HUGE library - 17k +方法。这取决于吨的东西。您可以做的一件事是通过单击" 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 :(得分:1)

如果它对任何人有帮助,我遇到了类似的问题,这是由Google服务的Gradle插件引起的依赖项与Firebase冲突造成的。

在我的顶级build.gradle中,我在buildscript中:

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

在我的app的build.gradle中引入(自动)与之相冲突的依赖项:

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

有点令人困惑,因为我只有一个编译依赖,并且正在摸不着可能会发生冲突。

我删除了google-services gradle插件,它解决了这个问题。我想我也可以找到合适的版本:)

答案 4 :(得分:1)

我正在使用 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(app)并添加一个新的

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。 希望可以提供帮助。

答案 5 :(得分:0)

当我使用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'
        }
    }
}

答案 6 :(得分:0)

感谢this post,只需检查并将您的Google依赖关系版本升级到上一版本。

  

我可以解决我的问题。问题是BaseGameUtils仍然存在   使用/引用较旧版本的播放服务。添加正确   版本,它现在有效。猜猜我会为我的下一个省略BaseGameUtils   项目

答案 7 :(得分:0)

这是因为您的某些库使用其他库的不同版本。

查看您上次添加的库并排除。 对于我的项目来说,反应是本机 - 篝火&#39;。

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

答案 8 :(得分:-2)

请在build.gradle

中的android中添加此代码
dexOptions {
    preDexLibraries = false
}