DexException: Cannot merge new index 65536 into a

2019-01-21 10:28发布

For some unknown reason my app suddenly won't build from Android Studio.

I'm keep getting

> 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!

While the same application is built successfully from command line. I've checked method references count and it's way below the dreaded 64k.

I'm using AS 0.8.11 now.

5条回答
男人必须洒脱
2楼-- · 2019-01-21 10:31

This is a bug in the merger when the dex files that are being merged have more than 65536 strings. The new index can't fit in a const-string instruction, and the dex merger doesn't support changing instructions if they are different sizes, so it can't be widened to a const-string/jumbo instruction.This was fixed in jb-mr1 by adding a new option: --force-jumbo.This bug can be fixed by adding "dex.force.jumbo=true" to the project.properties.

查看更多
不美不萌又怎样
3楼-- · 2019-01-21 10:33

Set the jumboMode property in build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

I also found this useful: Showing dex method count by package.

查看更多
成全新的幸福
4楼-- · 2019-01-21 10:33

This works for me. I was getting com.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

If this isn't working, you might have reached method reference limit in dex which is a different issue. You need to use either multidex or proGuard.

查看更多
疯言疯语
5楼-- · 2019-01-21 10:39

Try to add this line on your project.properties

dex.force.jumbo=true

Which increment the limit for strings in a dex files. And your project will probably compile.

Note : Also with jumbo set, the is another limit of 64K only for methods in an single dex. If you get this limit in the future , you will need to remove some dependencies.

Update - Google Play Services 6.5 (12-08-14)

With version 6.5 Google finally unbundled the Google Play Services. So from now on it'll be possible to selectively compile the APIs into your executable.

Example :

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

For all the other individual Google Play Services APIs check this page on d.android.com.

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

查看更多
地球回转人心会变
6楼-- · 2019-01-21 10:41

With latest Android Studio and flag "force jumbo" checked on Android Studio compiler settings, this problem disappear.

查看更多
登录 后发表回答