DexException: не может объединить новый индекс 65536 в инструкцию без jumbo

По какой-то неизвестной причине мое приложение внезапно не будет создано из 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.

Ответ 1

Попробуйте добавить эту строку в свой проект project.properties

dex.force.jumbo = истина

Что увеличивает предел для строк в файлах dex. Вероятно, ваш проект будет скомпилирован.

Примечание. Кроме того, с помощью jumbo set, это еще один предел в 64K только для методов в одном 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.+'

Для всех других API-интерфейсов Google Play проверьте эту страницу на d.android.com.

Обновление (21-04-2015): https://developer.android.com/tools/building/multidex.html

Ответ 3

Это работает для меня. Я получал com.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

Если это не работает, возможно, вы достигли предела ссылки на метод в dex, который является другой проблемой. Вам нужно использовать либо multidex, либо proGuard.

Ответ 4

Это ошибка в слиянии, когда файлы dex, которые объединяются, имеют более 65536 строк. Новый индекс не может вписываться в команду const-string, и слияние с dex не поддерживает изменение инструкций, если они имеют разные размеры, поэтому его нельзя расширить до команды const-string/jumbo. Это было исправлено в jb-mr1, добавив новую опцию: -force-jumbo. Эта ошибка может быть исправлена ​​добавлением "dex.force.jumbo=true" в project.properties.

Ответ 5

С последней версией Android Studio и флагом "force jumbo", установленным в настройках компилятора Android Studio, эта проблема исчезает.