Jak rozwiązać błąd INSTALL_FAILED_DEXOPT?

181

Tworzę aplikację na Androida przy użyciu Androida 2.2, rozmiar pliku APK mojej aplikacji to 22,5 MB i chciałbym utworzyć nową kompilację dla tabletu Samsung. Otrzymałem następujący błąd:

INSTALL_FAILED_DEXOPT

Jak rozwiązać ten rodzaj błędu?

Jan
źródło
czy udało Ci się pomyślnie zainstalować tę aplikację na urządzeniach innych niż tablet Samsung?
Will Tate
1
Musisz wkleić dane wyjściowe logcat wygenerowane, gdy instalacja nie powiedzie się.
fadden
Miałem ten sam problem na urządzeniu, na którym testowałem (HTC Droid Eris). Miałem wcześniej zainstalowaną wersję mojej aplikacji na telefonie, właśnie odinstalowałem i ponownie zainstalowałem i wszystko było w porządku.
ninjasense
Odinstalowanie i ponowne zainstalowanie aplikacji zawsze działa. Wyczyść dane użytkownika lub odtworzenie AVD to po prostu to samo w bardziej czasochłonny sposób. Pytanie brzmi: czy jest lepsza i szybsza opcja?
bschandramohan
7
@ChandraMohan to NIE jest prawda. Przestań próbować to zrobić. Sformatowałem urządzenie i próbowałem ponownie zainstalować aplikację. Nadal zgłasza ten błąd!
Artiom Chilaru

Odpowiedzi:

99

Ponowne uruchomienie emulatora z poziomu Android SDK and AVD Manageri wybranie opcji Wipe User Datarozwiązało ten problem dla mnie.

Możesz znaleźć opcję, jak zaznaczono na poniższym obrazku:

Opcja Wyczyść dane użytkownika podczas uruchamiania emulatora Androida

Vikas Patidar
źródło
17
A jeśli to mój telefon, a nie emulator?
mtmurdock
1
@mtmurdock spróbuj adb kill-servernastępnie adb start-serverpowinien rozwiązać twój problem. Może być starsza aplikacja, a następnie ją najpierw odinstaluj.
Vikas Patidar,
@mtmurdock Prawdopodobnie próbowałeś, ale ponowne uruchomienie telefonu zadziałało :)
Dunc
kill server, a następnie start nie działa dla mnie, restart emulatora i Wiping Data działa dla mnie.
Shuvo,
74

Wydawało mi się, że jest to związane z miejscem na dysku. Nowo zaktualizowany emulator 5.1 uruchamia się z błędem „mało miejsca na dysku” - i patrząc na właściwości emulatora, domyślna przestrzeń przydzielona dla pamięci wewnętrznej wynosi 800 MB, co wydaje się mało.

Rozwiązaniem było zatem zwiększenie tego (poszedłem do 4GB). Co dziwne, emulator nadal uruchamia się z tym samym ostrzeżeniem o miejscu na dysku, ale przywrócenie go do ustawień fabrycznych (Ustawienia -> Kopia zapasowa i przywracanie w emulatorze) rozwiązało to całkowicie dla mnie.

Trochę dziwne, że nie działa po wyjęciu z pudełka przy domyślnych ustawieniach.

HughHughTeotl
źródło
2
Rzeczywiście, to, jaki miałem problem i zresetowanie za pomocą ustawień telefonu, naprawiło to dla mnie. dzięki!
Justin Stanley
1
Próbowałem prawie wszystkiego, ale nic nie działało poza tym, dzięki
shehzy
1
Po 2 godzinach znalazłem ten komentarz - dziękuję za uratowanie mi dnia, zadziałało!
kilian eller
1
To spowodowało błąd INSTALL_FAILED_DEXOPT na moim emulatorze. Zwiększyłem rozmiar, ale musiałem przejść do ustawień i uruchomić przywracanie fabryczne. To rozwiązało problem.
Dave Thomas
Chryste ... znowu to przytrafiło mi się po aktualizacji mojego Mac OS. Podwojenie mojego zwrotu kosztów tego rozwiązania przejdź do -> ustawienia i uruchom przywracanie ustawień fabrycznych. Musiałem sprawdzić to pytanie tylko po to, aby przypomnieć sobie, jak to naprawiłem ... dzięki Bogu za historię przepełnienia stosu i udało mi się znaleźć swój komentarz
Dave Thomas
17

Twoja stara wersja instalowanej aplikacji ma zależne biblioteki / pliki JAR, które zostały zmienione. Napotkałem ten problem podczas aktualizowania innych plików jar, z których korzystała moja aplikacja.

Będziesz musiał odinstalować swoją starą wersję, a wtedy nie powinieneś mieć więcej problemów ...

Ustawienia -> Aplikacje -> Zarządzaj aplikacjami -> [Znajdź i odinstaluj swoją aplikację]

Błędy INSTALL_FAILED_DEXOPT nie powinny wystąpić. Lubić

[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!

Whoo hoo.

Lenn Dolling
źródło
Mogę zgodzić się z przyczyną i skutkiem. Ta sama sytuacja miała miejsce w moim przypadku po majstrowaniu przy słoikach. Dla mnie było to tylko na urządzeniach z Androidem 2.3 Gingerbread, ICS i Lollipop były w porządku.
AlexVPerl
Czy będzie to problem podczas przesyłania do Sklepu Play? czy instalator usuwa aplikację i ponownie ją instaluje?
Eduardo Naveda
14

Jeśli korzystasz z Android Studio , spróbuj wyczyścić projekt:

Kompiluj> Wyczyść projekt

SandroMarques
źródło
12

Wygląda na to, że ten komunikat o błędzie może mieć wiele różnych przyczyn. Sprawa, na którą natrafiłem, była na prawdziwym urządzeniu (więc rozwiązania bazujące na emulatorze nie miały zastosowania).

Zasadniczo, gdy tak się stanie, ustaw filtr Logcat na Verbose lub Warn , co pomoże ci uzyskać więcej informacji o przyczynie.

W moim przypadku do projektu, nad którym pracowałem (duża istniejąca baza kodu), włączano wiele lub sprzecznych wersji JUnit. Aplikacja na Androida, którą próbowałem wdrożyć, miała kilka projektów bibliotek jako zależności i omyłkowo skonfigurowałem rzeczy, aby uwzględnić wiele plików jar JUnit.

Odkryłem to na podstawie serii komunikatów Logcat. Zauważ, że wiersz WARN podaje przyczynę:

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
źródło
3
To dobra sugestia. Zgadzam się, że powinieneś przejrzeć dane wyjściowe LogCat, aby zobaczyć, jaki jest rzeczywisty komunikat o błędzie. Otrzymałem ten błąd, ponieważ na moim urządzeniu brakowało miejsca i nie udało się rozpakować pliku APK. Uważam, że istnieje wiele powodów, dla których ten błąd może zostać uruchomiony, a odinstalowanie lub wyczyszczenie danych użytkownika może być niepotrzebne. Opublikowałem tę samą sugestię jako odpowiedź na podobne (zduplikowane) pytanie.
Bryan Bedard
2
Przepraszam, to ten sam punkt, który zrobił Bryan Bedard. Brakowało mi miejsca - zwykle pojawia się błąd „za mało miejsca”, ale z jakiegoś powodu pojawia się ten błąd DEXOPT. Logcat pokazał błąd Napompowanie zip: niepowodzenie zapisu: Brak miejsca na urządzeniu.
mobibob
12

Wpadłem na to z Androidem Studio 3.4.1, ale używając starszego (5.0) emulatora. Ta procedura (na komputerze Mac) rozwiązała problem:

  1. zatrzymaj emulator
  2. cd ~ / .android / avd / [nazwa emulatora] .avd
  3. rm * .lock
  4. wyczyść emulator
  5. uruchom emulator
Rozpoznać
źródło
3
Robienie tego, co wspomniano powyżej, po zwiększeniu pamięci wewnętrznej emulatora do 4 GB, jest jedyną rzeczą, która działała dla mnie.
dell116,
@ dell116 Nie dziwię się, że czasami trzeba zrobić więcej niż jedną rzecz, opierając się tylko na różnych odpowiedziach na to pytanie!
Ken,
3
Zgoda! I gratuluję przejęcia nazwy użytkownika „Ken”.
dell116,
Niestety żadna z kombinacji wycierania / zwiększania pamięci / wycierania ponownie mi nie pomogła. Poddałem się.
Can Poyrazoğlu,
1
@ CanPoyrazoğlu - ja też prawie się poddałem. Myślę, że emulatory muszą być niezwykle wrażliwe i wiele rzeczy może spowodować ich awarię (o czym świadczą różne odpowiedzi tutaj na pytanie zadane ponad osiem lat temu). Usunięcie plików .lock było kluczowe w moim przypadku, ale z pewnością widzę, gdzie to może nie rozwiązać wszystkich problemów.
Ken
11

Zmieniłem rozmiar pamięci RAM i pojemność pamięci wewnętrznej emulatora Teraz TO Działa ... w menadżerze eclipse AVD

KATJ Srinath
źródło
2
To również rozwiązuje problem w Android Studio. Miałem tylko 200 MB pamięci wewnętrznej. Zwiększ do 1 GB i problem rozwiązany. Ten sam komunikat o błędzie ... Dzięki!
Joan Casadellà
U mnie też działa. Podnieś z 200 MB!
JohnyTex
10

wypróbuj moją odpowiedź https://stackoverflow.com/a/34918549/3737254

Jeśli używasz Android Studio 2.0, WYŁĄCZ natychmiastowe uruchamianie.

FYI, natychmiastowe uruchamianie to nowa funkcja w Android Studio 2.0 (nigdy jej nie używałem>. <)

jak wyłączyć: preferencje -> kompilacja, wykonanie i wdrożenie -> natychmiastowe uruchomienie -> wyłączenie, a potem działa jak magia

Cieszyć się!

yfsx
źródło
To był mój problem podczas testowania starych interfejsów API na emulatorze. Po zmianie tego i wyczyszczeniu emulatora zadziałało!
Ben
8

Musiałem wyłączyć Instant Run, aby rozwiązać problem. Aby wyłączyć natychmiastowe uruchamianie w systemie OS X, przejdź do Android Studio > Preferencje > Kompilacja, wykonanie, wdrożenie > Natychmiastowe uruchamianie, a następnie usuń zaznaczenie z Enable Instant Run to hot swap code/resource changes on deploy (default enabled).

iamkaan
źródło
To zadziałało dla mojego dexopt error. Application failed to install. Wypróbowałem te, zanim znalazłem to: adb kill-server adb start-serverponowne uruchomienie Android Studio i przywrócenie ustawień fabrycznych mojego urządzenia.
Sherlock,
7

Jedynym rozwiązaniem, które działało, aby to naprawić, było zwiększenie pamięci RAM maszyny wirtualnej do 4 GB.

Jim
źródło
6

Miałem dziś ten sam problem z Android Studio na nowym urządzeniu wirtualnym. Wyglądało na to, że pobrałem x86_64obraz, odtwarzając VD z równoważnym x86obrazem, który go naprawił.

Spodziewałem się dostać INSTALL_FAILED_NO_MATCHING_ABISw tym przypadku, ale jakoś utknąłemINSTALL_FAILED_DEXOPT

dvkch
źródło
1
Dla mnie było odwrotnie. Próba instalacji x86nie powiodła się. Po pobraniu obrazu i zmianie emulatora x86_64na błąd zniknął. Użyłem obrazu systemu API 21.
friederbluemle
U mnie też działało odwrotnie. Wypróbowałem wszystko w tym wątku, zanim spróbowałem użyć x86_64obrazu zamiast tego x86. Używałem też API 21 AVD (Nexus 5).
Renan Ferrari
5

Pracuję z Android Studio i mam ten sam błąd.

Pomogło usunięcie folderu budowania głównego modułu Modul. Po usunięciu wszystko wróć do normy.

Informatic0re
źródło
4

INSTALL_FAIL_DEXOPT zwykle ma do czynienia z ograniczeniem umieszczonym w classes.dex. Na wszystkim, co sprzed ICS, dexopt zawiedzie przy czymkolwiek powyżej 5 MB. Najnowsze wersje Androida używają bufora 8 lub 16 MB.

Sprawdź rozmiar classes.dex w swoim pliku APK. Dobrze byłoby również sprawdzić, jaka jest liczba metod, ponieważ dex ma limit 65536 metod / pól.


Bibliografia:

Błąd podczas instalowania aplikacji (INSTALL_FAILED_DEXOPT)

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

Jak zmniejszyć kod - limit metod 65k w dex

Jared Rummler
źródło
3

Napotkałem ten problem po włączeniu flagi jumboMode w build ( dex.force.jumbo=true). Wszystko działało dobrze na nowszych urządzeniach z Androidem, ale instalacja nie powiodła się na Gingerbread.

Jeśli więc Twoja aplikacja wymaga trybu jumbo ze względu na irytujące ograniczenie 65k, spróbuj wyciąć nieużywany kod / ciągi i ustawić tryb jumbo z powrotem na fałsz.

friederbluemle
źródło
Właśnie włączyłem także tryb jumbo i zacząłem to widzieć podczas testowania na starych urządzeniach. Niestety powrót do wartości false nie rozwiązał problemu. Użycie proguard do zmniejszenia pliku APK.
slott
Napotkaliśmy ten sam problem, tryb Jumbo nie działa z API 10
Henrique de Sousa
3

classes.dexnie dociera do finału .apk. Uruchamianie gradlew --offline clean && gradlew --offline assembleDebugza każdym razem rzeczy dla mnie naprawiało. Od tego momentu możesz ponownie rozpocząć uruchamianie aplikacji z Android Studio.

EDYCJA: Przed tym, co powiedziałem powyżej, przejdź do Menedżera zadań i zabij wszystkie cmd.exei conhost.exeprocesy (lub tylko ten, w którym aaptutknął). W przeciwnym razie aaptod teraz po uruchomieniu z wiersza poleceń wystąpi niesławny błąd -1073741819.

Eugen Pechanec
źródło
Docenione: D warto wspomnieć, że najnowsze narzędzia do kompilacji (2.1.1) i wtyczka gradle (1.0.0-rc1) działają jak urok
Eugen Pechanec
Cóż, nie wiem, właśnie zainstalowałem Android Studio 1.0 i musiałem to zrobić, aby działało.
axnsan,
Spróbuj też zabić wszystkie pliki java.exe. Ile masz pamięci RAM? Upewnij się, że masz najnowszą wersję następujących urządzeń: Android Studio 1.0.0-rc4, wtyczka gradle dla Androida 1.0.0-rc1, narzędzia do budowania 21.1.1. Od jakiegoś czasu nie widziałem tego błędu.
Eugen Pechanec,
Narzędzia do kompilacji to 21.1.1, Android Studio to 1.0 i nie wiem, jak znaleźć wersję wtyczki Gradle. Właśnie
pobrałem
Zajrzyj do głównego build.gradlepliku projektu . Wśród zależności buildscript powinno być classpath 'com.android.tools.build:gradle:1.0.0-rc4'.
Eugen Pechanec,
3

Otrzymałem ten sam błąd i naprawiłem go, zwiększając rozmiar pamięci wewnętrznej.

Pamięć wewnętrzna była początkowo ustawiona na 32 MB (wiem), a następnie zainstalowałem na niej kilka apek, które pozostawiły mniej miejsca niż to, co było potrzebne do zainstalowania.

binRAIN
źródło
3

sprawdź przestrzeń dyskową na swoim urządzeniu

Farido mastr
źródło
2
To pomaga, zwiększyłem pamięć RAM i przestrzeń mojego urządzenia wirtualnego, a następnie problem został rozwiązany.
Wesely
2

Odinstalowałem aplikację i mimo to otrzymałem błąd INSTALL_FAILED_DEXOPT. Jeśli pracujesz z Androidem Studio / gradle: gradle clean załatwiło mi sprawę , na zdrowie.

JacksOnF1re
źródło
Musiałem użyć gradlew, ale hej, zadziałało! dzięki (również usunął pakiet w data / data)
Maxim Geerinck
2

w build.gradle zmień kompilację i skompiluj do najnowszej wersji. i to zadziałało dla mnie.

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

android {
    compileSdkVersion 22
    buildToolsVersion "22"
Riseres
źródło
2

dużo odpowiedzi tutaj, ale może to pomoże komuś, że miałem ten problem z prawdziwym urządzeniem, a problem był z D8

spróbuj dodać to do swojego gradle.properties i to działa dla mnie

android.enableD8=false
android.enableD8.desugaring= false
NataTse
źródło
1

Otrzymałem ten problem podczas próby instalacji na urządzeniach 2.3 (dobrze na 4.0.3). Skończyło się na tym, że projekt lib, którego używałem, miał wiele słoików, które były dla rzeczy już w Androidzie, np. Parsery HttpClient i XML itp. Patrząc na logcatto, znalazłem to, ponieważ mówiło mi, że pomija zajęcia, ponieważ już są teraźniejszość. Niezły, nieprzydatny oryginalny błąd!

Dori
źródło
2
Mam ten sam problem, czy możesz wyjaśnić, w jaki sposób rozwiązałeś ten problem. Mam biblioteki o rozmiarze większym niż 7 MB, więc nie pozwala mi na instalację na wcześniejszym urządzeniu, takim jak 2.3.
Rakki:
W moim przypadku używałem kompilacji Gradle do tworzenia apk, a winowajcą był słoik dostawcy zamków do skakania. Musiałem wykluczyć moduł „bcprov-jdk” w zależnościach kompilacji projektu głównego.
Pawan
1

Testowałem ten błąd na prawdziwym urządzeniu. Wyczyszczenie pamięci podręcznej / odinstalowanie, ponowne uruchomienie wszystkiego nie zadziałało, usunięcie zawartości folderu kompilacji zadziałało :) (Android studio)

Żyroskop
źródło
1

Nie ma ogólnego rozwiązania, musisz znaleźć błąd zgłoszony na swoim Logcat, aby móc go rozgryźć. Czasami jest to klasa, której nie można „dexed” z powodu użycia klasy niedostępnej na przykład w określonym docelowym interfejsie API. Lub może to być klasa, do której odwołujesz się w swoim kodzie, ale biblioteka, w której się znajduje, nie jest pakowana.

Alécio Carvalho
źródło
1

Rozważ użycie proguard, aby zmniejszyć pakiet APK. Mam ten sam problem, jeśli spróbuję zainstalować duży 25 MB + APK na starym urządzeniu Samsung Galaxy Ace 2.3.6 bez zmniejszania / optymalizacji kodu za pomocą programu Proguard.

Tryb Jumbo i ponowne uruchamianie urządzenia nie działają.

szczelina
źródło
1

targetSdkVersion 22 // 17 ==========================> ustawienie tej liczby mniejszej lub równej wersji systemu operacyjnego Android na urządzeniach może pomóc

 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
    }
Rycerz piorunów
źródło
0

Miałem ten problem, gdy w moich nazwach metod znajdowały się znaki Unicode (ze względu na kopiowanie / wklejanie z pliku PowerPoint), które nie podobały się Dalvik. Możesz to zobaczyć, patrząc na dane wyjściowe Logcata podczas próby zainstalowania APK.

To było na prawdziwym urządzeniu.

thoutbeckers
źródło
0

Rozwiązany przez poprawienie daty i godziny w telefonie (była to jakaś domyślna data 01.01.1980) i wyczyszczenie projektu.

Bez nazwy
źródło
0

Zmieniłem wersję 4 systemu Android dla SDK 21 i wystąpił ten błąd. Więc wróciłem do wersji wsparcia dla starej wersji (przed 21) i zadziałało. Błąd występował tylko w systemie Android 2.3

Cícero Moura
źródło
0

Napotkałem ten problem, gdy próbowałem zaktualizować nowe narzędzia do kompilacji 24.0.1. Połączenie internetowe zostało utracone, a narzędzia nie zostały pomyślnie pobrane, po czym otrzymałem ten błąd i spędziłem dużo czasu próbując go rozwiązać. Ale kiedy pomyślnie zaktualizowałem narzędzia do kompilacji - problem został rozwiązany. Powodzenia.

Alex Perevozchykov
źródło