Як вирішити помилку INSTALL_FAILED_DEXOPT?


181

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

INSTALL_FAILED_DEXOPT

Як вирішити таку помилку?


ви змогли успішно встановити цю програму на інших пристроях, крім планшета Samsung?
Буде Тейт

1
Вам потрібно вставити висновок logcat, згенерований, коли установка завершиться невдало.
вівторок

У мене була така ж проблема на пристрої, на якому я тестував (HTC Droid Eris). У мене була раніше встановлена ​​версія мого додатка на телефоні, я просто видалив та перевстановив, і все було добре.
ninjasense

Видалення та перевстановлення програми завжди працює. Стерти дані користувачів або відтворити AVD - це все те ж саме, що займає більше часу. Питання в тому, чи є кращий і швидший варіант?
bschandramohan

7
@ChandraMohan це НЕ правда. Перестаньте намагатися зробити це правдою. Я відформатував свій пристрій і спробував повторно встановити додаток. Це все-таки кидає цю помилку!
Артіом Чилару

Відповіді:


99

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

Ви можете знайти варіант, як виділено на зображенні нижче:

Очистіть параметр "Дані користувача" при запуску емулятора Android


17
Що робити, якщо це мій телефон, а не емулятор?
mtmurdock

1
Спробуйте @mtmurdock, adb kill-serverтоді adb start-serverслід вирішити вашу проблему. Можливо, версія для старих існує, тоді спочатку видаліть її.
Вікас Пацідар

@mtmurdock Ви напевно пробували, але перезапуск телефону працював на мене :)
Данк

сервер kill, а потім запуск не працював для мене, перезапуск емулятора і Wiping Data фактично працює для мене.
Шуво

74

Здавалося, це стосується дискового простору для мене. Нещодавно запущений 5.1 емулятор завантажується із помилкою «мало місця на диску» - і, дивлячись на властивості емулятора, за замовчуванням місце, призначене для внутрішнього зберігання, становить 800 Мб, що здається низьким.

Тому було рішення збільшити це (я пішов на 4 ГБ). Як не дивно, емулятор все ще завантажується з тим самим попередженням на диску, але заводські скидання (Налаштування -> Резервне копіювання та відновлення всередині емулятора) вирішили це повністю для мене.

Трохи дивно, що це не виходить із коробки з налаштуваннями за замовчуванням.


2
Насправді це те, що у мене виникло питання та скидання через налаштування телефону, вирішили це для мене. Дякую!
Джастін Стенлі

1
Спробував майже все, але нічого не
вийшло,

1
Через 2 години я знайшов цей коментар - дякую, що врятували мені день, працювали!
кілійський елер

1
Це спричинило INSTALL_FAILED_DEXOPT і на моєму емуляторі. Я збільшив розмір, але мені потрібно було перейти до налаштувань та запустити відновлення заводу. Це вирішило питання.
Дейв Томас

1
Христос ... знову це сталося зі мною після оновлення моєї ОС Mac. Подвоєння мого відшкодування цього рішення goto -> settings та запустіть відновлення заводу. Довелося шукати це питання, щоб тільки згадати, як я його виправив ... дякую Богу за історію переповнення стека, і я зміг знайти свій коментар
Дейв Томас,

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 або Попереджати , які допоможуть вам отримати більше інформації про причини.

У моєму випадку в проект, над яким я працював, було включено кілька чи суперечливих версій 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 показав помилку надування зашпорку: запис не вдалося: на пристрої не залишилось місця.
mobibob

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

Я змінив розмір оперативної пам’яті та ємність зберігання інтернелів емулятора. Тепер він працює ... у затемненні AVD-менеджера


2
Це також вирішує проблему в Android Studio. У мене було всього 200 Мб внутрішнього сховища. Зростання до 1 Гб і вирішення проблеми. Та сама помилка повідомлення ... Дякую !!
Джоан Касаделла

Працює і для мене. Підвищення від 200MB!
JohnyTex

10

спробуйте мою відповідь https://stackoverflow.com/a/34918549/3737254

якщо ви використовуєте android studio 2.0, ВИМКНУЙТЕ миттєвий запуск.

FYI, миттєвий запуск - це нова функція від android studio 2.0 (я її ніколи не використовував>. <)

як відключити: налаштування -> складання, виконання та розгортання -> миттєвий запуск -> відключення, то працює як магія

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


Це було моєю проблемою при тестуванні старих API на емуляторі. Після зміни цього та чистої серветки емулятора він працював!
Бен

8

Щоб вирішити проблему, мені потрібно було відключити функцію миттєвого запуску Щоб вимкнути функцію миттєвого запуску в 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

Єдине рішення, яке працювало на мені, щоб виправити це, було збільшення оперативної пам’яті VM до 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 і мала таку ж помилку.

Видалення папки збірки головного Modul допомогло. Після видалення все прийде в норму.


4

INSTALL_FAIL_DEXOPT зазвичай пов'язаний з обмеженням, розміщеним на class.dex. На будь-якому попередньому ICS dexopt не зможе отримати більше ніж 5 Мб. В останніх версіях Android використовується буфер розміром 8 або 16 Мб.

Перевірте розмір class.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 к., Спробуйте вирізати кілька невикористаних кодів / рядків і встановити режим перемикання назад на хибне.


Я також просто ввімкнув джембо-режим і почав бачити це під час тестування на старих пристроях. На жаль, повернення до помилки не вирішило проблему для мене. Використовуючи proguard, щоб зменшити APK.
слот

Ми зіткнулися з тією ж проблемою, що Jumbo Mode не працює з API 10
Анріке де Суса

3

classes.dexне доходить до фіналу .apk. gradlew --offline clean && gradlew --offline assembleDebugКожен раз, коли я працюю над фіксованими речами. З цього моменту ви можете знову запустити додаток із Android Studio.

EDIT: Перш ніж сказане вище, перейдіть до диспетчера завдань і вбийте всі cmd.exeта conhost.exeпроцеси (або лише той, в якому aaptзастрягли). В іншому випадку aaptбуде збій відтепер при запуску з командного рядка з сумнозвісною помилкою -1073741819.


Оцінено: D Варто зазначити, що новітні інструменти побудови (2.1.1) та плагін gradle (1.0.0-rc1) працюють як принадність
Євген Печанець

Ну, я не знаю про це, я щойно встановив android studio 1.0 і мені довелося це зробити, щоб він працював.
аксан

Спробуйте вбити також всі java.exe. Скільки у вас оперативної пам’яті? Переконайтеся, що у вас є остання версія наступної версії: Android Studio 1.0.0-rc4, gradle android плагін 1.0.0-rc1, інструменти для збирання 21.1.1. Я не бачив помилки вже деякий час.
Євген Печанець

Інструменти збирання - 21.1.1, а Android студія - 1.0, і я не знаю, як знайти версію плагіна Gradle. Я тільки що завантажив версію 1.0, яка з’явилася вчора на сайті розробників для Android ...
axnsan

Подивіться у свій build.gradleфайл кореневого проекту . Серед залежностей buildscript повинні бути classpath 'com.android.tools.build:gradle:1.0.0-rc4'.
Євген Печанець

3

Я отримав таку ж помилку і виправив її, збільшивши розмір внутрішньої пам’яті.

Спочатку внутрішній накопичувач був встановлений на 32 Мб (я знаю), а потім я встановив на нього пару апків, які залишили менше місця, ніж потрібно для встановлення.


3

перевірити місце на вашому пристрої


2
Це допомагає, я збільшив таран і простір свого віртуального пристрою, а потім вирішив проблему.
Веселі

2

У мене було видалено додаток, і все-таки я отримав помилку INSTALL_FAILED_DEXOPT. Якщо ви працюєте з Android Studio / gradle: gradle clean зробив трюк для мене, ура.


Мені довелося використовувати gradlew, але ей це спрацювало! спасибі (також вилучив пакунок у даних / даних)
Maxim Geerinck

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, який я використовував, мав декілька банок, які були для речей, які вже знаходяться в андроїді, наприклад, HttpClient та XML-аналізатори тощо. Дивлячись на logcatмене, я знайшов це, оскільки він говорив мені, що він пропускає класи через те, що вони вже є теперішній. Приємна непомітна оригінальна помилка там!


2
У мене така ж проблема, чи можете ви пояснити, як ви вирішили цю проблему. У мене розмір libs більше 7 mb, тому його не дозволяють мені встановлювати на більш ранньому пристрої, як 2.3.
Rakki s

У моєму випадку я використовував gradle build для створення apk, а винуватець - банальний замок. Мені довелося виключати модуль 'bcprov-jdk' в залежності від компіляції кореневого проекту.
Pawan

1

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


1

Немає загального рішення, ви повинні знайти помилку, повідомлену на вашому Logcat, щоб мати змогу зрозуміти це. Іноді це клас, який не може бути 'dexed' через використання класу, недоступного, наприклад, у визначеному API Target. Або це може бути клас, на який ви посилаєтесь у своєму коді, але бібліотека, в якій він знаходиться, не пакується.


1

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

Режим Jumbo та перезапуск пристрою не працюють.



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

У мене виникла ця проблема, коли в іменах моїх методів були деякі символи Unicode (через, скоріше, копіювання / вставлення з файлу 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.