DexException:无法将新索引65536合并为非巨型指令


84

由于某些未知原因,我的应用突然无法从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。

Answers:


57

尝试在您的project.properties上添加此行

dex.force.jumbo = true

这增加了dex文件中字符串的限制。您的项目可能会编译。

注意:同样使用巨型设置,这是另一个限制,仅适用于单个dex中的方法。如果将来遇到此限制,则需要删除一些依赖项。

更新-Google Play服务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,请访问d.android.com上的页面。

更新(21-04-2015):https : //developer.android.com/tools/building/multidex.html


11
添加到project.properties没有工作,所以我更新了我的gradle这个构建脚本如下所述:stackoverflow.com/questions/17320088/...
Martynas Jurkus

1
我做了两个解决方案:添加dex.force.jumbo属性和dexOptions,但是我仍然收到相同的错误。另外一个选项?
胡安·萨拉维亚


谢谢@HareshChhelana。由于某种原因它开始起作用..但是我真的没有做任何特别的事情。我有一些同事在没有此选项的情况下编译项目,但是现在它对我有用。谢谢!
胡安·萨拉维亚

1
我发现不使用整个“ Google Play服务”,而是使用“基本”捆绑包,将其保持在65K dex限制以下是有用的:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

在build.gradle中设置jumboMode属性:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

我还发现这很有用:按package显示dex方法计数


12
谢谢!它也对我有用。但是这个“ jumboMode”是什么意思?
yital9

3
@ yital9,您可以在此处了解有关巨型模式的更多信息:stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

请解释此块的原因
eC的Droid的

由于proguard的缘故,我在发布构建正常时,仅在调试构建类型中添加了此类型。修改后,调试版本运行良好。这样好吗
石榴石

1
这对我有用。请注意,要更改的build.gradle应该是引发com.android.dex.DexException的模块。
弗朗西斯·培根

54

这对我有用。我正在com.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

如果这不起作用,则您可能已达到dex中的方法引用限制,这是另一个问题。您需要使用multidex或proGuard。


对我来说有用。谢谢!!!但是什么是“ jumboMode”?你能解释一下吗?@Sayooj
DG

13

当要合并的dex文件具有超过65536个字符串时,这是合并中的错误。新索引无法容纳在const字符串指令中,并且dex合并不支持更改大小不同的指令,因此无法将其扩展为const字符串/巨型指令。在jb-mr1中添加新选项---force-jumbo。可以通过"dex.force.jumbo=true"在project.properties中添加来修复此错误。


1
@DeepakSharma您必须在启用jumboMode之后清理项目
Lilo

-1

使用最新的Android Studio并在Android Studio编译器设置中选中“ force jumbo”标志,此问题就消失了。


3
如果可能的话,请在您的答案中添加一些详细信息。
shA.t 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.