现象描述
注意,本文描述的方案,仅在Android Studio 1.5,Gradle插件版本1.3.1中测试成立!
同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件。
编译时候产生如下的异常信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 节中添加分包设置:
12345dependencies {...compile 'com.android.support:multidex:1.0.1'...}2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.
12345defaultConfig {...multiDexEnabled true...}3.如果没有创建自己的
Application.class
,直接在AndroidManifest.xml
文件的Application声明中添加:1android:name="android.support.multidex.MultiDexApplication"如果实现了自己的
Application.class
,则修改继承的父类为
android.support.multidex.MultiDex.MultiDexApplication
-
Multidex Apps单元测试
1.在项目的build.gradle文件的dependencies 节中添加分包设置:
12345dependencies {...androidTestCompile 'com.android.support:multidex-instrumentation:1.0.1'...}2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.
123456defaultConfig {...multiDexEnabled truetestInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"...}