Intereting Posts
Android. Заменить символ * из строки Как создать полностью настраиваемый диалог / всплывающее окно в Android (изменить цвет наложения и расположение диалогового окна) Поле editText требуется, прежде чем переходить к другому действию Как правильно использовать AsyncTask в Android Ограничения Cordova PhoneGap Как удалить строку правого поля в Android Studio (Intellij)? Делает onMeasure в Android возвращается Размер, включая отступ и маржу? Нужна командная строка для запуска веб-браузера с помощью adb Match_parent не работает для ListView, если ListView находится внутри NestedScrollView Android – учебные пособия для OpenGL ES 2.0 с использованием NDK? Выполнение покупок в приложении с учетной записью Google Play отличается от основной учетной записи устройства RecyclerView – прокрутка до позиции не работает каждый раз Студия Android говорит «Empty Test Suite» для AndroidTestCase Где я могу найти исходный код для приложений gmail, facebook и twitter для Android? Они даже с открытым исходным кодом? Создать селектор стилей

Слишком большое приложение? Невозможно выполнить dex: невозможно объединить новый индекс в инструкцию, отличную от jumbo

При компиляции приложения появляется следующее сообщение об ошибке:

[2014-05-07 21:48:42 - Dex Loader] Unable to execute dex: Cannot merge new index 65536 into a non-jumbo instruction! 

Я нахожусь в точке, что, если я объявлю новый метод в любом месте моего пакета , я получаю эту ошибку. Если я этого не сделаю, приложение будет компилироваться.

Я хотел бы знать, что именно (и точно) означает эту ошибку. Мое приложение большое, но я не думаю, что он такой большой! Так:

  • Означает ли ошибка, что у меня слишком много методов? общественности? статические? пакет? Члены?
  • Связано ли это с методами / членами моего корневого пакета, а также с включенными библиотеками JAR?
  • Есть ли способ получить больше отладочной информации об этом?

Я уже знаю о том, что флаг «jumbo» включен в похожие вопросы здесь, в SO, однако, я думаю, что jumbo-режим недоступен на уровне API, на который я нацелен (ICS).

Solutions Collecting From Web of "Слишком большое приложение? Невозможно выполнить dex: невозможно объединить новый индекс в инструкцию, отличную от jumbo"

Это связано с количеством методов библиотек, включенных в проект. Например, если у вас есть отслеживание в вашем приложении, просто Google Analytics составляет ~ 7000 методов. В одном из моих проектов с использованием Lombok (2 МБ JAR) я дал мне эту проблему. Решил избавиться от этой библиотеки.

Ваша ошибка связана с количеством строк (методов, членов и т. Д.) В одном файле dex.

Вам нужно скомпилировать приложение, используя jumbo in dex, с:

 dex.force.jumbo=true 

В project.properties

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

Кроме того, с jumbo set, это еще один предел 64K только для методов в одном dex. Если вы получите этот предел в будущем, вам нужно будет удалить некоторые зависимости.

UPDATE : для сборки с Gradle : в Gradle вы можете включить jumboMode также в файле build.gradle, используя:

 dexOptions { jumboMode = true } 

Проверьте: Android Build: Dex Jumbo Mode в Gradle

Также с Gradle вы можете избежать ограничения 64K для методов с использованием сборки multidex, учебника здесь: https://developer.android.com/tools/building/multidex.html

Для построения градиента просто добавьте dexOptions в build.gradle, чтобы включить jumbo-режим:

 android { dexOptions { jumboMode = true } } 

Не забудьте запустить «gradle clean» перед вашим новым зданием.

Похоже, проблема возникает из-за того, что все файлы классов из вашего проекта и файлы JAR упакованы вместе перед DEXING. Это может быть не совсем верно, но любой способ контролировать это в нашем проекте оказался довольно сложным. Даже удаление материалов, которые изначально вызвали эту проблему, очистка и перестройка, не помогли нам решить проблему последовательно.

Поэтому мы воспользовались этой возможностью, чтобы переключить наш проект на Android Studio и смогли решить проблему, включив ProGuard для отладочных сборников. Точнее, мы используем только термоусадочную фазу технологической цепочки ProGuard.

Gradle упрощает включение ProGuard для отладочных сборников:

 buildTypes { debug { runProguard true proguardFile 'proguard-project-debug.txt' } } 

И вот конфигурация Debug ProGuard, которую мы используем:

 -keep class com.your.code.** # Use -keep to explicitly keep any other classes shrinking would remove -dontoptimize -dontobfuscate -ignorewarnings 

Это увеличивает время сборки проекта, но хорошая сторона заключается в том, что отладчик все еще работает.

Единственная более быстрая альтернатива, о которой я могу думать, заключается в том, что любые JAR-файлы вручную удаляются из неиспользуемых файлов классов. Но это не только сложно сделать, но и неудобно, когда вы захотите использовать чуть большую часть библиотеки позже.

Надеюсь, это поможет другим разработчикам бороться с этой проблемой. И, возможно, в будущем Google сможет улучшить компилятор, который делает эту обрезку по умолчанию. Наш файл APK DEX прошел с 8 МБ до 2,9 МБ.

Новые версии версии (1.0.0+)

В новых версиях студии Android (1.0+) обновленный комплект Gradle обновился. Были некоторые изменения в том, как работает механизм сборки, поэтому ваш проект Gradle-файл теперь может использовать параметры minifyEnabled и shrinkResources . Текущая версия – 1.1.0.

Сохранение изменений на быстроходной платформе, такой как Android, требует больших усилий, но часто вознаграждается новыми функциями, инструментами и более быстрым временем сборки. Поэтому обновление Android Studio и (тщательное) обновление ваших проектов стоит того времени, когда вы инвестируете.

 buildTypes { debug { proguardFile 'proguard-project-debug.txt' minifyEnabled true shrinkResources true } }