Я уже видел разные версии dex erros, но эта новая. очистка / перезапуск и т. д. не поможет. Библиотечные проекты кажутся нетронутыми, а зависимость, похоже, правильно связана.
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
или
Cannot merge new index 65950 into a non-jumbo instruction
или
java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
tl; dr : Официальное решение от Google наконец-то здесь!
http://developer.android.com/tools/building/multidex.html
Только один маленький совет, вам, вероятно, придется сделать это, чтобы предотвратить нехватку памяти при выполнении дексинга.
dexOptions {
javaMaxHeapSize "4g"
}
Есть также гигантский режим, который может исправить это менее надежным способом:
dexOptions {
jumboMode true
}
Обновление: если ваше приложение толстое и у вас слишком много методов внутри основного приложения, вам может потребоваться переорганизовать ваше приложение согласно
http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
что не вызываете эту функцию, если она недоступна?Ответы:
Обновление 3 (3.11.2014)
Google наконец выпустил официальное описание .
Обновление 2 (31.10.2014)
Плагин Gradle v0.14.0 для Android добавляет поддержку multi-dex. Чтобы включить, вы просто должны объявить это в build.gradle :
Если ваше приложение поддерживает Android до 5.0 (т. Е. Если вам
minSdkVersion
20 или ниже), вы также должны динамически исправлять приложение ClassLoader , чтобы оно могло загружать классы из вторичных приставок. К счастью, есть библиотека, которая сделает это за вас. Добавьте его в зависимости вашего приложения:Вы должны вызвать код исправления ClassLoader как можно скорее. Документация
MultiDexApplication
класса предлагает три способа сделать это (выберите один из них , наиболее удобный для вас):1 - Объявите
MultiDexApplication
класс как приложение в вашем AndroidManifest.xml :2. Пусть ваш
Application
класс расширяет класс MultiDexApplication :3 - Звоните
MultiDex#install
по вашемуApplication#attachBaseContext
методу:Обновление 1 (17.10.2014):
Как и ожидалось, поддержка multidex поставляется в редакции 21 библиотеки поддержки Android. Вы можете найти android-support-multidex.jar в папке / sdk / extras / android / support / multidex / library / libs.
Поддержка Multi-Dex решает эту проблему. dx 1.8 уже позволяет создавать несколько файлов dex.
Android L будет поддерживать multi-dex изначально, и следующая версия библиотеки поддержки будет охватывать более ранние версии API 4.
Об этом заявил Анвар Гулум в этом эпизоде подкастов для разработчиков Android за кулисами. Я разместил стенограмму (и общее объяснение мульти-декс) соответствующей части.
источник
java.lang.ClassNotFoundException: Didn't find class "org.qtproject.qt5.android.QtActivityDelegate" on path: DexPathList[[],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
. Оказалось, что моя ошибка заключалась в том, что я не применял дополнительные шаги для поддержки Android до 5.0. С учетом сказанного, вариант № 3 решил это, и у меня больше не былоClassNotFoundException
проблем. Спасибо, @ Алекс Липов!Как уже говорилось, у вас слишком много методов (более 65 тыс.) В вашем проекте и библиотеках.
Предотвратите проблему: уменьшите количество методов с помощью Play Services 6.5+ и support-v4 24.2+
Поскольку сервисы Google Play часто являются одними из основных подозреваемых в «потере» методов с помощью методов 20k + . Сервисы Google Play версии 6.5 или выше, вы можете включить сервисы Google Play в свое приложение, используя несколько небольших клиентских библиотек. Например, если вам нужны только GCM и карты, вы можете использовать только эти зависимости:
Полный список библиотек и их обязанности можно найти в официальном документе Google .
Обновление : начиная с версии Support Library v4 v24.2.0 она была разделена на следующие модули:
Обратите внимание, однако, что если вы используете
support-fragment
, он будет зависеть от всех других модулей (т. Е. Если вы используете,android.support.v4.app.Fragment
нет никакой выгоды)Смотрите здесь официальные заметки о выпуске для support-v4 lib
Включить MultiDexing
С Lollipop (он же инструменты для сборки 21+) с ним очень легко работать. Подход заключается в том, чтобы обойти проблему 65k методов на файл dex, чтобы создать несколько файлов dex для вашего приложения. Добавьте следующее в ваш файл сборки Gradle ( это взято из официального документа Google по приложениям с более чем 65k методами ):
Второй шаг - либо подготовить класс приложения, либо, если вы не расширяете приложение, используйте его
MultiDexApplication
в своем манифесте Android:Либо добавьте это в ваш Application.java
или используйте предоставленное приложение от Mutlidex lib
Предотвратить OutOfMemory с MultiDex
В качестве дальнейшего совета, если вы столкнетесь с
OutOfMemory
исключениями на этапе сборки, вы можете увеличить кучу с помощьючто бы установить кучу до 4 гигабайт.
Смотрите этот вопрос для более подробной информации о проблеме памяти кучи dex.
Проанализируйте источник проблемы
Для анализа источника методов плагин gradle https://github.com/KeepSafe/dexcount-gradle-plugin может помочь в сочетании с деревом зависимостей, предоставляемым gradle, например:
Смотрите этот ответ и вопрос для получения дополнительной информации о методе подсчета в Android
источник
Ваш проект слишком велик. У тебя слишком много методов. В одном приложении может быть только 65536 методов. см. здесь https://code.google.com/p/android/issues/detail?id=7147#c6
источник
Приведенный ниже код помогает, если вы используете Gradle. Позволяет легко удалить ненужные службы Google (если вы используете их), чтобы вернуться к порогу ниже 65 КБ. Все кредиты на этот пост: https://gist.github.com/dmarcato/d7c91b94214acd936e42
Edit 2014-10-22 : было много интересных дискуссий по сути, упомянутой выше. TLDR? посмотрите на это: https://gist.github.com/Takhion/10a37046b9e6d259bb31
Вставьте этот код в конец файла build.gradle и настройте список ненужных вам служб Google:
источник
clean
каждый раз, когда я связывался с исключениями (мы используем аналитику).Я поделился примером проекта, который решает эту проблему, используя скрипт сборки custom_rules.xml и несколько строк кода.
Я использовал его в своем собственном проекте, и он работает безупречно на устройствах 1M + (от Android-8 до последней Android-19). Надеюсь, поможет.
https://github.com/mmin18/Dex65536
источник
Столкнулся с той же проблемой и решил ее, отредактировав мой файл build.gradle в разделе зависимостей, удалив:
И заменить его на:
источник
Попробуйте добавить код ниже в build.gradle, у меня это сработало -
источник
Идеальным решением для этого было бы работать с Proguard. как упоминалось в комментарии. Это уменьшит размер файла dex вдвое.
источник
Вы можете проанализировать проблему (ссылки на файлы dex) с помощью Android Studio:
Построить -> Анализировать APK ..
На панели результатов нажмите на файл classes.dex
И вы увидите:
источник
Gradle + Proguard решение:
источник
Удалите файл JAR из папки Libs и скопируйте в другую папку. И перейдите в _Project Properties> Выберите Java Build Path, выберите «Библиотеки», выберите «Добавить внешний JAR», выберите «Удаленный JAR-файл» в свой проект, нажмите «Сохранить», это будет добавлено в разделе «Ссылки». Библиотека вместо папки Libs. Теперь почистите и запустите ваш проект. Вам не нужно добавлять любой код для MultDex. Это просто сработало для меня.
источник
Я столкнулся с той же проблемой сегодня, что работало ниже
Для ANDROID STUDIO ... Включить мгновенный запуск
В File-> Preferences-> Build, Execution, Deployment-> Instant Run-> Check Enable Instant run для горячей замены ...
Надеюсь, поможет
источник