5

在构建/运行我的项目时,我突然遇到了这个问题。

Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Users/aidanfollestad/Documents/android-sdk/build-tools/21.1.2/dx --dex --no-optimize --output /Users/aidanfollestad/Android Projects/Impression/app/build/intermediates/dex/debug --input-list=/Users/aidanfollestad/Android Projects/Impression/app/build/intermediates/tmp/dex/debug/inputList.txt
  Error Code:
    2
  Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
        at com.android.dx.command.dexer.Main.run(Main.java:246)
        at com.android.dx.command.dexer.Main.main(Main.java:215)
        at com.android.dx.command.Main.main(Main.java:106)

我的 Gradle 文件包含以下内容:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.14.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'versionPlugin'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.afollestad.impression"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 19
        versionName "0.7.0"
    }
}

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
    compile 'com.koushikdutta.ion:ion:2.0.+'
    compile 'com.github.chrisbanes.photoview:library:1.2.+'
    compile 'com.afollestad:material-dialogs:0.4.5'
    compile 'com.google.android.gms:play-services:6.5.87'

    compile 'com.google.api-client:google-api-client:1.18.0-rc'
    compile 'com.google.api-client:google-api-client-android:1.18.0-rc'
    compile 'com.google.api-client:google-api-client-gson:1.18.0-rc'
    compile 'com.google.apis:google-api-services-drive:v2-rev152-1.19.0'

    compile('com.crashlytics.sdk.android:crashlytics:2.1.0@aar') {
        transitive = true;
    }
}

versionPlugin{
    buildTypesMatcher = 'release'
    supportBuildNumber = false
    fileNameFormat = '$appPkg-v$versionName-$versionCode'
}

我的材料对话框库仅引用 AppCompat-v7,与此 Gradle 文件引用的版本相同。我引用的 libs 文件夹中没有任何 JAR。我不知道哪些库相互干扰(除了 Play Services 和 AppCompat 的可能性?)。有什么想法或解决方案吗?

我注意到支持库的 Ion 引用 v4 ( https://github.com/koush/ion/blob/master/ion/build.gradle#L17 ),也许这可能会干扰 AppCompat?

4

3 回答 3

12

尝试启用 multidex build.gradle :

android {
   defaultConfig {
      ...
      multiDexEnabled = true
   }
}

参考:无法执行 dex:方法 ID 不在 [0, 0xffff] 中:65536

于 2014-12-16T04:48:06.350 回答
11

您可能会达到 65k 方法的限制。尝试使用粒度更细的 Google Play 服务,而不是使用 multiDex。按照本指南,您只能使用您想要的部分。可能这会解决你的问题。

于 2015-02-10T14:43:50.303 回答
2

此异常表明您的项目已达到最大方法数 65536。您只需执行以下工作。它对我有用

第 1 步:
在 build.gradle 内部

      defaultConfig {  
       multiDexEnabled = true 
      }

第2步:

清单应用程序标签内

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

   or

第 3 步:如果您使用扩展应用程序的类,请执行以下操作:

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

第4步:

在 build.gradle 里面

  android{
    dexOptions { 
    incremental true 
    javaMaxHeapSize "4g" 
    }
   }
于 2015-12-09T08:27:12.800 回答