com.android.dex.DexIndexOverflowException

现象描述


注意,本文描述的方案,仅在Android Studio 1.5,Gradle插件版本1.3.1中测试成立!

同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件。

编译时候产生如下的异常信息:

Error:Execution failed for task ':xxx:dexRelease'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    C:\Android\sdk\android-sdk\build-tools\23.0.1\dx.bat --dex --output D:\Source\android\build\intermediates\dex\release --input-list=D:\Source\android\build\intermediates\tmp\dex\release\inputList.txt
Error Code:
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:302)
        at com.android.dx.command.dexer.Main.run(Main.java:245)
        at com.android.dx.command.dexer.Main.main(Main.java:214)
        at com.android.dx.command.Main.main(Main.java:106)

 


解决方案


Google给出的解决方案就是使用MultiDexApplication

    • Multidex Apps

      1.在项目的build.gradle文件的dependencies 节中添加分包设置:

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

      2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.

      defaultConfig { 
         ... 
      multiDexEnabled true 
      ... 
      }
      

      3.如果没有创建自己的Application.class,直接在AndroidManifest.xml文件的Application声明中添加:

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

      如果实现了自己的Application.class,则修改继承的父类为
      android.support.multidex.MultiDex.MultiDexApplication

 

  • Multidex Apps单元测试

    1.在项目的build.gradle文件的dependencies 节中添加分包设置:

    dependencies { 
    ... 
          androidTestCompile 'com.android.support:multidex-instrumentation:1.0.1'
       ... 
    }
    

    2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.

    defaultConfig { 
       ... 
    multiDexEnabled true 
    testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
    ... 
    }
    

 


参考链接


  1. Building Apps with Over 65K Methods
  2. Which package for MultiDexTestRunner? android.support.multidex or com.android.test.runner
  3. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注