当我尝试在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服务更新到最新版本后才会出现此错误。
有什么建议吗?
答案 0 :(得分:2)
dex格式不支持超过64k的方法索引。
当您的dex文件包含许多字符串(> 64k)并且您需要合并其他dex文件(库等)时,Jumbo模式非常有用。它基本上强制字节码始终使用巨型字符串引用,以避免在合并dex文件时出现问题。
值得注意的是,jumbo模式与方法索引无关,当你有太多方法时它们没有帮助。