由于某些未知原因,我的应用程序突然无法从Android Studio构建。
我一直在
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!
虽然从命令行成功构建了相同的应用程序。 我已经检查了方法引用计数,它低于可怕的64k。
我现在正在使用AS 0.8.11。
答案 0 :(得分:240)
在build.gradle中设置jumboMode属性:
android {
...
dexOptions {
jumboMode true
}
}
我还发现这很有用:Showing dex method count by package。
答案 1 :(得分:53)
尝试在project.properties
上添加此行dex.force.jumbo =真
增加dex文件中字符串的限制。你的项目可能会编译。
注意:同样使用jumbo set,只有单个dex中的方法的另一个限制是64K。如果将来获得此限制,则需要删除一些依赖项。
更新 - Google Play Services 6.5(12-08-14)
在6.5版本中,Google最终拆分了Google Play服务。因此,从现在开始,可以有选择地将API编译到您的可执行文件中。
示例:
compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'
对于所有其他单独的Google Play服务API,请检查此page on d.android.com.
更新(2015年4月21日): https://developer.android.com/tools/building/multidex.html
答案 2 :(得分:53)
这对我有用。我得到了com.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!
android {
...
dexOptions {
jumboMode true
}
}
如果这不起作用,您可能已达到dex中的方法参考限制,这是一个不同的问题。您需要使用multidex或proGuard。
答案 3 :(得分:12)
当合并的dex文件超过65536个字符串时,这是合并中的错误。新索引不适合const-string指令,如果指令大小不同,则dex merger不支持更改指令,因此无法扩展为const-string / jumbo通过添加一个新选项修复了jb-mr1: - force-jumbo。这个bug可以通过将"dex.force.jumbo=true"
添加到project.properties来修复。
答案 4 :(得分:-1)
使用最新的Android Studio和旗帜"强制jumbo"检查Android Studio编译器设置,此问题消失。