在android中构建apk时出错

时间:2017-06-09 06:06:03

标签: android

这是我的build.gradle,当我通过点击构建apk来构建apk时显示的错误。我之前看到过一些查询但是无法找出问题解决方案

错误:任务':app:transformClassesWithDexForDebug'执行失败。

  

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException:方法ID不在[0, 0xffff]:65536

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.ranjeet.location"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.google.android.gms:play-services:10.2.6'
    compile 'com.google.android.gms:play-services-maps:10.2.6'
}

4 个答案:

答案 0 :(得分:2)

你有太多的方法。 dex只能有65536种方法。

因此,启用multidex如下:

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



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

答案 1 :(得分:0)

你有太多的方法。 dex只能有65536种方法。

因此,启用multidex如下:

android {

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

并粘贴此代码,

dexOptions {
    javaMaxHeapSize "4g"
    preDexLibraries = false
}

答案 2 :(得分:0)

com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

潜在的问题是由当前的Dalvik指令集强加的。具体来说,任何invoke- *方法。这些期望一个16位参数,表示目标方法的参考索引。限制为16位,有效值介于0和65536之间。这意味着,如果您最终调用超过65,536个已定义的方法,则将超出此限制。

解决方案:   MultiDex允许您使用一个APK中包含的多个DEX文件。只需几步,您的类将自动拆分为多个DEX文件(classes.dex,classes2.dex,classes3.dex等),以防您达到方法索引限制。

获取更多信息:https://www.contentful.com/blog/2014/10/30/android-and-the-dex-64k-methods-limit/

答案 3 :(得分:0)

如果 minSdkVersion 设置为 21或更高,您需要做的就是在应用级build.gradle文件中将multiDexEnabled设置为true,如下所示:

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

但是,如果 minSdkVersion 设置为 20或更低,则必须使用multidex支持库,如下所示:

修改应用级build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 25
        multiDexEnabled true
    }
    ...
}

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

像这样创建一个Application类:

public class MyApplication extends MultiDexApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

在Manifest中添加此应用程序类。

您还可以查看以下链接:

https://developer.android.com/studio/build/multidex.html