java – Gradle构建失败:Dex文件不能超过64k

参见英文答案 > Unable to build apk: The number of method references cannot exceed 64K                                    3个
每当我按项目构建并准备在我的设备上启动时,我都会收到此错误:

Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at 07001

另外,我收到此错误:

Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘C:\Program Files\Java\jdk1.8.0_91\bin\java.exe” finished with non-zero exit value 2

它说gradle构建失败了两个错误

所以我有一些问题:

>什么是dex文件
>我没有直接使用它们,为什么我会得到上面的错误?
>什么是dex文件?
>这些文件对.APK文件的大小有什么要说的吗?

在我停止使用proguard进行调试构建之后,这些错误再次出现,因为StackTrace没有显示,而且在我激活proguard之前我有错误.

我曾经有过这个错误,我删除了dex文件夹,它解决了它,但现在它突然不再了.

我的gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.myproject"
        minSdkVersion 15
        targetSdkVersion 23

    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

    }
}

dependencies {

    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    compile 'com.android.support:support-v4:23.3.0'
    compile 'com.google.android.gms:play-services:9.2.0'
    compile 'com.google.android.gms:play-services-ads:9.2.0'
}

解决方法:

您添加的依赖项越多 – 方法计数越高.更改您的gradle以反映这一点:

defaultConfig {
    ...
    minSdkVersion 15
    targetSdkVersion 23
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

这是一个直接的修复,只有在你的minSdkVerison为14或更高时才有效.
还要添加以下依赖项:

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

有时,您利用的依赖项将(单独)引用相同的库 – 您可能有许多方法,这些方法是加倍,三倍,四倍等等.请查看此SO答案以解决此问题并始终减少您的APK大小.
gradle – library duplicates in dependencies

上一篇:浅谈 unix, linux, ios, android 区别和联系


下一篇:是什么原因导致Android Dalvik java.lang.VerifyError“数组索引的无效注册表类型”?