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!

Хоча той самий додаток успішно створюється з командного рядка. Я перевірив кількість посилань на методи, і це значно нижче страшних 64 тис.

Зараз я використовую AS 0.8.11.

Відповіді:


57

Спробуйте додати цей рядок до вашого project.properties

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

Які збільшують обмеження для рядків у файлах dex. І ваш проект, напевно, буде скомпільований.

Примітка: Також із набором джамбо, це ще одна межа 64K лише для методів в одному дексі. Якщо ви отримаєте це обмеження в майбутньому, вам доведеться видалити деякі залежності.

Оновлення - Google Play Services 6.5 (12.08.2014)

З версією 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


11
Додавання project.propertiesне зробив роботу , так що я оновив свій Gradle сценарій збірки , як описано тут: stackoverflow.com/questions/17320088 / ...
Martynas Jurkus

1
Я зробив обидва рішення: додав властивість dex.force.jumbo та dexOptions, але я все ще отримую ту саму помилку. Інший варіант?
Хуан Саравія


Дякую @HareshChhelana. З якихось причин це почало працювати .. але я дійсно нічого особливого не робив. У мене є кілька колег, які складають проект без цих опцій, але зараз це працює на мене. Дякую!
Хуан Саравія

1
замість того, щоб складати всі сервіси Google Play, я виявив, що використання "базового" набору буде корисним, щоб не перевищувати граничний рівень 65K:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2,

245

Встановіть властивість jumboMode у build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

Я також знайшов це корисним: Відображення кількості методів dex за пакетом .


12
Дякую! Це працює і для мене. Але що означає цей "джамбоМод"?
yital9

3
@ yital9 ви можете дізнатись більше про режим джамбо тут: stackoverflow.com/a/30517283/4034572
Альберт Віла Кальво

поясніть, будь ласка, причину цього блокування
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, що є іншою проблемою. Вам потрібно використовувати мультидекс або proGuard.


Це робота для мене. Дякую!!! але що таке 'jumboMode'? Ви можете пояснити мені? @Sayooj
DG

13

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


1
@DeepakSharma Ви повинні очистити свій проект після ввімкнення jumboMode
Ліло

-1

З останньою версією Android Studio та прапором "Force jumbo", перевіреними в налаштуваннях компілятора Android Studio, ця проблема зникає.


3
Якщо це можливо, додайте дещо у своїй відповіді, плз.
shA.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.