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
Ответ 2
Задайте свойство jumboMode в файле build.gradle:
android {
...
dexOptions {
jumboMode true
}
}
Я также нашел это полезным: Отображение метода dex по пакету.
Ответ 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, эта проблема исчезает.