Как решить ошибку INSTALL_FAILED_DEXOPT?

181

Я занимаюсь разработкой приложения для Android с использованием Android 2.2, размер APK моего приложения составляет 22,5 МБ, и я хочу создать новую сборку для планшета Samsung. Я получил следующую ошибку:

INSTALL_FAILED_DEXOPT

Как мне решить эту ошибку?

Джон
источник
Удалось ли успешно установить это приложение на другие устройства, кроме планшета Samsung?
Будет Тейт
1
Вам необходимо вставить выходные данные logcat, сгенерированные при сбое установки.
Fadden
У меня была такая же проблема на устройстве, на котором я тестировал (HTC Droid Eris). У меня была ранее установленная версия моего приложения на телефоне, я просто удалил и переустановил, и это было хорошо.
ниндзясенсе
Удаление и переустановка приложения всегда работают. Сотрите пользовательские данные или воссоздайте AVD, все они делают то же самое в более длительном порядке. Вопрос в том, есть ли лучший и более быстрый вариант?
bschandramohan
7
@ChandraMohan, это НЕ правда. Прекратите пытаться сделать это правдой. Я отформатировал свое устройство и попытался переустановить приложение. Это все еще выбрасывает эту ошибку!
Артём Чилару

Ответы:

99

Перезапуск эмулятора из Android SDK and AVD Managerи выбор опции Wipe User Dataрешил эту проблему для меня.

Вы можете найти эту опцию, как показано на рисунке ниже:

Параметр Wipe User Data при запуске эмулятора Android

Викас Патидар
источник
17
Что делать, если это мой телефон, а не эмулятор?
mtmurdock
1
@mtmurdock попробуйте adb kill-serverтогда adb start-serverрешить вашу проблему. Может быть старое приложение существует, затем сначала удалите его.
Викас Патидар
@mtmurdock Вы, наверное, пытались, но перезагрузка телефона у меня сработала :)
Дунк
Уничтожить сервер, а затем запустить у меня не получилось, перезапуск эмулятора и Wiping Data на самом деле работает для меня.
Шуво
75

Похоже, это связано с дисковым пространством для меня. Недавно развернутый эмулятор 5.1 загружается с ошибкой «недостаточно места на диске» - и, глядя на свойства эмулятора, пространство по умолчанию, выделяемое для внутренней памяти, составляет 800 МБ, что кажется низким.

Решение, поэтому было увеличить это (я пошел на 4 ГБ). Как ни странно, эмулятор по-прежнему загружается с тем же предупреждением о дисковом пространстве, но его сброс на заводские настройки (Настройки -> Резервное копирование и восстановление в эмуляторе) решил это полностью для меня.

Просто немного странно, что это не работает из коробки с настройками по умолчанию.

HughHughTeotl
источник
2
Действительно это то, что проблема, которая у меня была и сброс через настройки телефона, исправила это для меня. Спасибо!
Джастин Стэнли,
1
Перепробовал почти все, но ничего не
получалось,
1
Через 2 часа я нашел этот комментарий - спасибо, что спас мой день, работал!
Килиан Эллер
1
Это вызвало INSTALL_FAILED_DEXOPT на моем эмуляторе тоже. Я увеличил размер, но мне нужно было зайти в настройки и запустить заводское восстановление. Это исправило проблему.
Дэйв Томас
1
Господи ... опять это случилось со мной после обновления моей Mac OS. Удвойте мое возмещение этого решения, перейдите -> настройки и запустите восстановление заводских настроек. Пришлось посмотреть на этот вопрос, просто чтобы вспомнить, как я его исправил ... Слава Богу, за историю переполнения стека, и я смог найти свой комментарий
Дейв Томас,
17

Ваша старая версия приложения, которое вы устанавливаете, имеет зависимые библиотеки / файлы, которые были изменены. Я столкнулся с этой проблемой при обновлении других файлов 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 2.3 Gingerbread, ICS и Lollipop были в порядке.
AlexVPerl
Будет ли это проблемой при загрузке в Play Store? или установщик удаляет приложение и переустанавливает?
Эдуардо Наведа
14

Если вы используете Android Studio , попробуйте очистить ваш проект:

Построить> Чистый проект

SandroMarques
источник
12

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

В основном, когда это происходит, установите для фильтра Logcat значение Verbose или Warn , что поможет вам получить больше информации о причине.

В моем случае несколько или конфликтующие версии JUnit были включены в проект, над которым я работал (большая существующая кодовая база). Приложение Android, которое я пытался развернуть, содержало несколько библиотечных проектов в качестве зависимостей, и я по ошибке настроил несколько jar-файлов JUnit.

Я обнаружил это на основе серии сообщений 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)
wsanville
источник
3
Это хорошее предложение. Я согласен с тем, что вы должны просмотреть выходные данные LogCat, чтобы увидеть, что является фактическим сообщением об ошибке. Я получал эту ошибку, и это потому, что на моем устройстве не хватало места для хранения, и он не мог разархивировать APK. Я полагаю, что есть несколько причин, по которым эта ошибка может быть вызвана, и удаление или очистка пользовательских данных может быть ненужным. Я опубликовал это же предложение в качестве ответа на аналогичный (дублирующий) вопрос.
Брайан Бедард
2
Извините, это тот самый момент, который сделал Брайан Бедард. Мне не хватило места - обычно я получаю сообщение об ошибке типа «недостаточно места», но по какой-то причине я получаю эту ошибку DEXOPT. Logcat показал ошибку Zip inflate: запись не удалась: на устройстве не осталось места.
Мобибоб
12

Столкнулся с этим с Android Studio 3.4.1, но с использованием более старого (5.0) эмулятора. Эта процедура (на Mac) исправила проблему:

  1. остановить эмулятор
  2. cd ~ / .android / avd / [имя эмулятора] .avd
  3. rm * .lock
  4. стереть эмулятор
  5. запустить эмулятор
кругозор
источник
3
Делать то, что упомянуто выше, после увеличения внутренней памяти эмулятора до 4 Гб - это единственное, что мне помогло.
dell116
@ dell116 Я не удивлен, что иногда нужно делать больше, чем просто, основываясь только на разных ответах на этот вопрос!
Кен
3
Согласовано! И поздравляю с зацеплением имени пользователя "Кен".
dell116
К сожалению, ни одна из комбинаций очистки / увеличения памяти / очистки снова не помогла мне. Я сдался.
Может Пойразоглу
1
@ CanPoyrazoğlu - я тоже почти сдался. Я думаю, что эмуляторы должны быть чрезвычайно чувствительными, и многие вещи могут привести к их отказу (о чем свидетельствуют все разные ответы здесь на вопрос, заданный более восьми лет назад). Удаление файлов .lock было ключевым в моем случае, но я, конечно, вижу, где это может решить не все проблемы.
Кен
11

Я изменил размер оперативной памяти и внутреннюю емкость эмулятора. Теперь он работает ... в Eclipse AVD manager

КАТЖ Сринат
источник
2
Это также решает проблему в Android Studio. У меня было только 200 Мб встроенной памяти. Поднимитесь до 1Гб и проблема решена. Это же сообщение об ошибке ... Спасибо!
Джоан Касаделла
У меня тоже работает. Поднять с 200 МБ!
JohnyTex
10

попробуй мой ответ https://stackoverflow.com/a/34918549/3737254

Если вы используете Android Studio 2.0, отключите мгновенный запуск.

К вашему сведению, мгновенный запуск - это новая функция от Android Studio 2.0 (я никогда не использовал ее>. <)

как отключить: настройки -> сборка, выполнение и развертывание -> мгновенный запуск -> отключить, затем работает как по волшебству

Наслаждайтесь!

yfsx
источник
Это было моей проблемой при тестировании старых API на эмуляторе. После изменения этого и чистой очистки эмулятора все заработало!
Бен
8

Мне нужно было отключить Instant Run, чтобы исправить проблему. Чтобы отключить мгновенный запуск в OS X, выберите « Android Studio» > « Установки» > « Сборка, выполнение, развертывание» > « Быстрый запуск», а затем снимите галочку с Enable Instant Run to hot swap code/resource changes on deploy (default enabled).

iamkaan
источник
Это сработало для моего dexopt error. Application failed to install. Я попробовал это, прежде чем нашел это: adb kill-server adb start-serverперезапуск Android Studio и сброс настроек к заводским настройкам моего устройства.
Шерлок
7

Единственное решение, которое помогло мне исправить это, - увеличить ОЗУ виртуальной машины до 4 ГБ.

Джим
источник
6

У меня была такая же проблема сегодня с Android Studio на новом виртуальном устройстве. Оказалось, я скачал x86_64образ, воссоздав VD с эквивалентнымx86 изображением, исправившим его.

Я ожидал получить INSTALL_FAILED_NO_MATCHING_ABISв этом случае, но каким-то образом я застрял сINSTALL_FAILED_DEXOPT

dvkch
источник
1
Для меня это было наоборот. Попытка установки x86не удалась. После загрузки образа и смены эмулятора x86_64ошибка исчезла. Я использовал образ системы API 21.
Friederbluemle
Противоположное сработало и для меня. Перепробовал все в этой теме, прежде чем пытаться использовать x86_64изображение вместо x86одного. Я также использовал API 21 AVD (Nexus 5).
Ренан Феррари
5

Я работаю с Android Studio и была такая же ошибка.

Помогло удаление папки сборки основного модуля. После удаления все возвращается на круги своя.

Informatic0re
источник
4

INSTALL_FAIL_DEXOPT обычно имеет отношение к пределу, установленному на classes.dex. На любом pre-ICS dexopt не будет работать ни на чем больше 5 МБ Последние версии Android используют буфер 8 или 16 МБ.

Проверьте размер classes.dex в вашем APK. Также было бы хорошо посмотреть, каков счет вашего метода, поскольку у dex есть 65536 предел метода / поля.


Ссылки:

Ошибка при установке приложения (INSTALL_FAILED_DEXOPT)

https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920

Как уменьшить код - лимит метода 65k в dex

Джаред Раммлер
источник
3

Я столкнулся с этой проблемой после включения флага jumboMode в build ( dex.force.jumbo=true). Все работало нормально на новых устройствах Android, но установка не удалась на Gingerbread.

Поэтому, если ваше приложение требует джамбо-режима из-за раздражающего ограничения в 65 КБ, попробуйте обрезать неиспользуемый код / ​​строки и установить для джамбо-режима значение false.

friederbluemle
источник
Я также просто включил режим jumbo и начал это видеть при тестировании на старых устройствах. К сожалению возвращение к ложному не решило проблему для меня. Использование proguard для сжатия APK сделал.
Слот
Мы столкнулись с той же проблемой, Jumbo Mode не работает с API 10
Энрике де Соуза
3

classes.dexне доходит до финала .apk. Запуск gradlew --offline clean && gradlew --offline assembleDebugисправленных вещей для меня каждый раз. С этого момента вы можете снова запустить приложение из Android Studio.

РЕДАКТИРОВАТЬ: Перед тем, что я сказал выше, зайдите в диспетчер задач и убейте все cmd.exeи conhost.exeпроцессы (или только тот, в котором aaptзастрял). В противном случае aaptпроизойдет сбой при запуске из командной строки с печально известной ошибкой -1073741819.

Евгений Печанец
источник
Ценю: D стоит упомянуть, что новейшие инструменты сборки (2.1.1) и плагин gradle (1.0.0-rc1) работают как шарм
Eugen Pechanec
Ну, я не знаю об этом, я только что установил Android Studio 1.0 и должен был сделать это, чтобы заставить его работать.
Axnsan
Попробуйте убить все java.exe тоже. Сколько у вас оперативной памяти? Убедитесь, что у вас установлена ​​последняя версия: Android Studio 1.0.0-rc4, плагин gradle android 1.0.0-rc1, инструменты сборки 21.1.1. Я не видел ошибку в течение некоторого времени.
Евгений Печанец
Инструменты сборки - 21.1.1, android studio - 1.0, и я не знаю, как найти версию плагина gradle. Я только что скачал версию 1.0, которая появилась вчера на сайте разработчиков Android ...
Axnsan
Посмотрите в вашем корневом build.gradleфайле проекта . Среди зависимостей buildscript должны быть classpath 'com.android.tools.build:gradle:1.0.0-rc4'.
Евгений Печанец
3

Я получил ту же ошибку и исправил ее, увеличив размер внутреннего хранилища.

Внутреннее хранилище было изначально настроено на 32 МБ (я знаю), а затем я установил на него пару apks, которые оставили меньше места, чем нужно для установки.

binRAIN
источник
3

проверьте место на вашем устройстве

Фаридо мастр
источник
2
Это помогает, я увеличил оперативную память и пространство моего виртуального устройства, затем проблема решена.
Wesely
2

Я удалил приложение и все же получил ошибку INSTALL_FAILED_DEXOPT. Если вы работаете с Android Studio / gradle: gradle clean помог мне, Cheers.

JacksOnF1re
источник
Я должен был использовать Gradlew, но эй, это сработало! спасибо (также удалил пакет в data / data)
Максим Геринк
2

В build.gradle изменение скомпилировано и собрано до последней версии. и это сработало для меня.

================

android {
    compileSdkVersion 22
    buildToolsVersion "22"
riseres
источник
2

здесь много ответов, но, возможно, это может помочь кому-то, у меня была эта проблема с реальным устройством, и проблема была с D8

попробуйте добавить это в свой gradle.properties, и это работает для меня

android.enableD8=false
android.enableD8.desugaring= false
NataTse
источник
1

Я получал эту проблему при попытке установить на 2.3 устройства (отлично на 4.0.3). Это закончилось тем, что у проекта lib, который я использовал, было несколько jar-файлов, предназначенных для вещей, уже находящихся в Android, например, HttpClient, парсеры XML и т. Д. Глядя на это, logcatя обнаружил, что это говорит о том, что пропускаются классы из-за того, что они уже были настоящее время. Хорошая бесполезная ошибка!

Дори
источник
2
У меня та же проблема. Можете ли вы объяснить, как вы решили эту проблему? У меня есть libs размером более 7 МБ, поэтому я не могу установить его на более раннее устройство, как 2.3.
Ракки с
В моем случае я использовал сборку gradle для создания apk, и виновником был jar-провайдер. Мне пришлось исключить модуль 'bcprov-jdk' в зависимостях компиляции корневого проекта.
Паван
1

У меня была эта ошибка тестирования на реальном устройстве. Очистка кеша / удаление, перезапуск всего у меня не сработал, удаление содержимого папки сборки делали :) (Android studio)

гироскоп
источник
1

Универсального решения не существует, вы должны найти ошибку, сообщенную на вашем Logcat, чтобы иметь возможность ее выяснить. Иногда это класс, который не может быть «dexed» из-за использования класса, например, недоступного в указанном Target API. Или это может быть класс, на который вы ссылаетесь в своем коде, но библиотека, в которой он находится, не упаковывается.

Альесио Карвалью
источник
1

Подумайте об использовании Proguard, чтобы уменьшить ваш APK. У меня та же проблема, если я пытаюсь установить большой 25MB + APK на старое устройство Samsung Galaxy Ace 2.3.6 без сжатия / оптимизации кода с помощью proguard.

Jumbo mode и перезапуск устройства не работают.

Слотт
источник
1

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
    }
Рыцарь грома
источник
0

У меня была эта проблема, когда в именах моих методов были некоторые символы Юникода (из-за копирования / вставки из файла powerpoint), которые Дальвику не нравились. Вы можете увидеть это, посмотрев на выход Logcat при попытке установить APK.

Это было на реальном устройстве.

thoutbeckers
источник
0

Решено путем корректировки даты и времени на телефоне (это была некоторая дата по умолчанию 01.01.1980) и очистки проекта.

Без имени
источник
0

Я изменил свою версию поддержки Android версии 4 для SDK 21 и имел эту ошибку. Поэтому я вернулся к версии поддержки старой версии (до 21), и она работала. Ошибка происходила только в Android 2.3

Сисеро Моура
источник
0

Я столкнулся с этой проблемой, когда пытался обновить новые инструменты сборки 24.0.1. Подключение к Интернету было потеряно, и инструменты не были успешно загружены, после этого я получил эту ошибку и потратил много времени, пытаясь ее устранить. Но когда я успешно обновил инструменты сборки - проблема решена. Удачи.

Алекс Перевозчиков
источник