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

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


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 , попробуйте очистить ваш проект:

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


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)

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 (я никогда не использовал ее>. <)

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

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


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

8

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


Это сработало для моего 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


1
Для меня это было наоборот. Попытка установки x86не удалась. После загрузки образа и смены эмулятора x86_64ошибка исчезла. Я использовал образ системы API 21.
Friederbluemle

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

5

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

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


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.


Я также просто включил режим 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, которые оставили меньше места, чем нужно для установки.


3

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


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

2

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


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

2

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

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

android {
    compileSdkVersion 22
    buildToolsVersion "22"

2

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

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

android.enableD8=false
android.enableD8.desugaring= false

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.

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


0

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


0

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.