Android Build Dex Jumbo模式被忽略

时间:2016-03-04 21:26:25

标签: android intellij-idea dex

当我尝试在Intellij IDEA中编译一个android项目时,我得到了

Unable to execute DX
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473)

搜索我找到了这些解决方案

A)添加

android {
    dexOptions {
        jumboMode = true
    }
}
buid.gradle

中的

B)添加

dex.force.jumbo=true
在非{gradle项目的project.proprerties

我没有任何build.gradle,所以我尝试了第二个解决方案,以这种方式在project.properties末尾添加行

# Project target.

target=Google Inc.:Google APIs:23
dex.force.jumbo=true

不幸的是,此解决方案不起作用并得到相同的错误。 我的课程不是太大,想要避免使用Multidex ... 令我惊讶的是,只有将Android支持v4库和Google Play服务更新到最新版本后才会出现此错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

dex格式不支持超过64k的方法索引。

当您的dex文件包含许多字符串(> 64k)并且您需要合并其他dex文件(库等)时,Jumbo模式非常有用。它基本上强制字节码始终使用巨型字符串引用,以避免在合并dex文件时出现问题。

值得注意的是,jumbo模式与方法索引无关,当你有太多方法时它们没有帮助。