关于构建错误:DexIndexOverflowException

时间:2017-09-09 19:40:43

标签: android

我们在构建应用程序代码时遇到构建错误DexIndexOverflowException。

似乎我们在应用程序中的一些代码或应用程序中包含的libs是在Google Play服务中调用函数,最多限制为65536个调用。

要进一步跟踪它,您可以告诉我们一种方法来深入查看可能导致上述错误的依赖项。

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    //compile files('libs/commons-collections-3.2.1.jar')
    compile(name: 'HERE-sdk', ext: 'aar')
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true;
    }
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.google.android.gms:play-services-location:11.0.4'
    compile 'com.bugfender.sdk:android:0.8.4'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    compile 'com.github.lzyzsd:circleprogress:1.2.1'
    compile 'com.google.firebase:firebase-core:11.0.4'
    compile 'com.google.firebase:firebase-auth:11.0.4'

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

1 个答案:

答案 0 :(得分:1)

单个依赖项不是问题,问题是因为所有依赖项的方法计数加上应用程序代码的方法计数总计超过65536

正如android docs

中提到的那样
  

这两个错误条件都显示一个共同的数字:65,536。此数字很重要,因为它表示单个Dalvik可执行文件(DEX)字节码文件中的代码可以调用的引用总数。此页面解释了如何通过启用称为multidex的应用程序配置来超越此限制,该配置允许您的应用程序构建和读取多个DEX文件。

关于doc,请确保使用gradle.build文件中提到的所有依赖项,如果没有尝试在从构建文件中删除所有不必要的依赖项后构建项目。

如果仍有问题,那么您需要在代码上启用multidex

如果你的minSdkVersion小于21,那么你需要将它添加到构建gradle

android {
defaultConfig {
    ...
    minSdkVersion 21 
    targetSdkVersion 26
    multiDexEnabled true
}
...}



dependencies {
   compile 'com.android.support:multidex:1.0.1'
 }

并更改基本应用程序,以便在使用单独的应用程序类时扩展MultiDexApplication(您可能会使用crasylitics)。如果没有将以下内容添加到您的清单文件

            android:name="android.support.multidex.MultiDexApplication" >

然后尝试重新编译它。

赞誉