Как решить ошибку INSTALL_FAILED_DEXOPT?
Я занимаюсь разработкой приложения для Android с использованием Android 2.2, размер APK моего приложения составляет 22,5 МБ, и я хотел бы создать новую сборку для планшета Samsung. Я получил следующую ошибку:
INSTALL_FAILED_DEXOPT
Как мне решить эту ошибку?
47 ответов
Казалось, это связано с дисковым пространством для меня. Недавно развернутый эмулятор 5.1 загружается с ошибкой "недостаточно места на диске" - и, глядя на свойства эмулятора, пространство по умолчанию, выделяемое для внутренней памяти, составляет 800 МБ, что кажется мало.
Решение, поэтому было увеличить это (я пошел на 4 ГБ). Как ни странно, эмулятор по-прежнему загружается с тем же предупреждением о дисковом пространстве, но его сброс до заводских настроек ("Настройки" - "Резервное копирование и восстановление внутри эмулятора") решил для меня полностью.
Просто немного странно, что это не работает из коробки с настройками по умолчанию.
Перезапуск эмулятора из Android SDK and AVD Manager
и выбрав опцию Wipe User Data
решил эту проблему для меня.
Вы можете найти опцию, как выделено на приведенном ниже изображении:
Ваша старая версия приложения, которое вы устанавливаете, имеет зависимые библиотеки / файлы, которые были изменены. Я столкнулся с этой проблемой при обновлении других файлов jar, на которые ссылалось мое приложение.
Вам нужно будет удалить старую версию, и тогда у вас больше не будет проблем...
Настройки -> Приложения -> Управление приложениями ->[Найти и удалить приложение]
Ошибки INSTALL_FAILED_DEXOPT не должны возникать. подобно
[2011-06-14 01:23:40 - ProtectYourself] Installing ProtectYourself.apk...
[2011-06-14 01:24:26 - ProtectYourself] Installation error: INSTALL_FAILED_DEXOPT
[2011-06-14 01:24:26 - ProtectYourself] Please check logcat output for more details.
[2011-06-14 01:24:26 - ProtectYourself] Launch canceled!
Ууууууууу.
Попробуй это с Android Studio 3.4.1, но используя более старый (5.0) эмулятор. Эта процедура (на Mac) устранила проблему:
- остановить эмулятор
- cd ~/.android/avd/[имя эмулятора].avd
- rm *.lock
- стереть эмулятор
- запустить эмулятор
Если вы используете Android Studio, попробуйте очистить ваш проект:
Построить> Чистый проект
Кажется, что это сообщение об ошибке может иметь много разных причин. Случай, с которым я столкнулся, был на реальном устройстве (таким образом, решения основ эмулятора не применялись).
Обычно, когда это происходит, установите для фильтра Logcat значение Verbose или Warn, что поможет вам получить больше информации о причине.
В моем случае несколько или конфликтующие версии JUnit были включены в проект, над которым я работал (большая существующая кодовая база). Приложение Android, которое я пытался развернуть, содержало несколько библиотечных проектов в качестве зависимостей, и я по ошибке настроил несколько файлов JUnit JAR.
Я обнаружил это на основе серии сообщений Logcat. Обратите внимание, что строка WARN указывает причину:
DEBUG/dalvikvm(4808): DexOpt: 'Ljunit/framework/TestSuite$1;' has an earlier definition; blocking out
11-06 14:30:10.973: WARN/dalvikvm(4808): Invalid file flags in class Ljunit/runner/Sorter$Swapper;: 0209
11-06 14:30:10.973: null/libc(4808): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 4808 (dexopt)
Я изменил размер оперативной памяти и внутреннюю емкость эмулятора. Теперь он работает... в Eclipse AVD Manager
Попробуй мой ответ /questions/19363014/reshenie-problemyi-s-ustanovkoj-dexopt/19363024#19363024
Если вы используете Android Studio 2.0, отключите мгновенный запуск.
К вашему сведению, мгновенный запуск - это новая функция от Android Studio 2.0 (я никогда не использовал ее>.<)
как отключить: настройки -> сборка, выполнение и развертывание -> мгновенный запуск -> отключить, затем работает как по волшебству
Наслаждайтесь!
Единственное решение, которое помогло мне исправить это, заключалось в увеличении ОЗУ виртуальной машины до 4 ГБ.
Мне нужно было отключить Instant Run, чтобы исправить проблему. Чтобы отключить мгновенный запуск в OS X, выберите " Android Studio" > " Установки" > " Сборка, выполнение, развертывание" > " Быстрый запуск", а затем снимите галочку с Enable Instant Run to hot swap code/resource changes on deploy (default enabled)
,
У меня была такая же проблема сегодня с Android Studio на новом виртуальном устройстве. Оказалось, я скачал x86_64
изображение, воссоздающее VD с эквивалентным x86
изображение исправило это.
Я ожидал получить INSTALL_FAILED_NO_MATCHING_ABIS
в этом случае, но как-то я застрял с INSTALL_FAILED_DEXOPT
Я работаю с Android Studio и была такая же ошибка.
Помогло удаление папки сборки основного модуля. После удаления все возвращается на круги своя.
INSTALL_FAIL_DEXOPT обычно имеет отношение к пределу, установленному на classes.dex. На любом pre-ICS dexopt не будет работать ни на чем более 5 МБ. Последние версии Android используют буфер 8 или 16 МБ.
Проверьте размер файла classes.dex в вашем APK. Также было бы хорошо посмотреть, каков счет вашего метода, так как dex имеет 65536 предел метода / поля.
Рекомендации:
Я столкнулся с этой проблемой после включения флага jumboMode в сборке (dex.force.jumbo=true
). Все работало нормально на новых устройствах Android, но установка на Gingerbread не удалась.
Поэтому, если ваше приложение требует джамбо-режима из-за надоедливого ограничения в 65 тыс., Попробуйте обрезать неиспользуемый код / строки и установить для джамбо-режима значение false.
classes.dex
не выходит в финал .apk
, Бег gradlew --offline clean && gradlew --offline assembleDebug
исправил вещи для меня каждый раз. С этого момента вы можете снова запустить приложение из Android Studio.
РЕДАКТИРОВАТЬ: прежде чем я сказал выше, зайдите в диспетчер задач и убить все cmd.exe
а также conhost.exe
процессы (или только тот, в котором aapt
застрял). Иначе aapt
будет падать с этого момента при запуске из командной строки с печально известной ошибкой -1073741819
,
Я получил ту же ошибку и исправил ее, увеличив размер внутреннего хранилища.
Внутреннее хранилище было изначально настроено на 32 МБ (я знаю), а затем я установил на него пару apks, которые оставили меньше места, чем нужно для установки.
Здесь много ответов, но, возможно, это может помочь кому-то, у меня была эта проблема с настоящим устройством, а проблема была с D8
попробуйте добавить это в свой gradle.properties, и это сработает для меня
android.enableD8=false
android.enableD8.desugaring= false
Я удалил приложение и, тем не менее, получил ошибку INSTALL_FAILED_DEXOPT. Если вы работаете с Android Studio / gradle: gradle clean помог мне, Cheers.
В build.gradle изменение скомпилировано и сборка до последней версии. и это сработало для меня.
================
android {
compileSdkVersion 22
buildToolsVersion "22"
Я обнаружил, что есть одна причина этой проблемы: недостаточно места на мобильном телефоне. Поэтому я удаляю несколько приложений с мобильного телефона, и это исправлено.
targetSdkVersion 22//17==========================> установить это число меньше или равным версии ОС Android на устройствах может помочь
defaultConfig {
applicationId "software.nhut.personalutilitiesforlife"
minSdkVersion 16
targetSdkVersion 22//17==========================> set this number less then or equal to the version of Android OS on devices might help
versionCode 5
versionName "1.26"
// Enabling multidex support.
multiDexEnabled true
}
Универсального решения не существует, вы должны найти ошибку, сообщенную на вашем Logcat, чтобы иметь возможность ее выяснить. Иногда это класс, который не может быть "dexed" из-за использования класса, например, недоступного в указанном Target API. Или это может быть класс, на который вы ссылаетесь в своем коде, но библиотека, в которой он находится, не упаковывается.
Я получал эту проблему при попытке установить на 2.3 устройства (отлично на 4.0.3). Это закончилось тем, что из-за проекта lib, который я использовал, было несколько jar-файлов, которые были для вещей, которые уже есть в Android, например, HttpClient, парсеры XML и т. Д. logcat
заставил меня найти это, так как он говорил, что пропускает занятия, потому что они уже присутствуют. Хорошая бесполезная ошибка!
У меня была эта ошибка тестирования на реальном устройстве. Очистка кеша / удаление, перезапуск всего у меня не сработал, удаление содержимого папки сборки сделало:) (Android studio)
В моем случае это была ошибка в плагине kotlin версии 1.1.51
https://youtrack.jetbrains.com/issue/KT-20034
Эта ошибка появилась на старых устройствах (API 16).
Исправлено, удаляя аннотации @Parcelize и заменяя их следующим генератором кода: https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin
Подумайте об использовании Proguard, чтобы уменьшить ваш APK. У меня та же проблема, если я пытаюсь установить большой 25MB+ APK на старое устройство Samsung Galaxy Ace 2.3.6 без сжатия / оптимизации кода с помощью proguard.
Jumbo mode и перезапуск устройства не работают.
В моем случае проблема возникала на некоторых устройствах с API 21 и 22. Настройка android:vmSafeMode="true"
в манифесте под application
тег решил проблему. Однако это не рекомендуется для сборок выпуска, поэтому я создал два файла xml в папке значений. По умолчанию для старых API:
<resources>
<bool name="vm_safe_mode">true</bool>
</resources>
То же самое для API>= 23 с false
значение. В этом случае устройства с более новой ОС не пострадают, а старые, по крайней мере, будут работать.
Для меня это был proguard, который вызывал INSTALL_FAILED_DEXOPT на некоторых устройствах Samsung с Android 5.x.
А именно я должен был добавить это в proguard - не уверен, почему это помогло.
-keepattributes LocalVariableTable
Я изменил свою версию поддержки Android версии 4 для SDK 21 и имел эту ошибку. Поэтому я вернулся к версии поддержки старой версии (до 21), и она работала. Ошибка происходила только в Android 2.3