Come posso risolvere l'errore INSTALL_FAILED_DEXOPT?


181

Sto sviluppando un'applicazione Android utilizzando Android 2.2, la dimensione dell'APK dell'applicazione è di 22,5 MB e vorrei creare una nuova build per un tablet Samsung. Ho ricevuto il seguente errore:

INSTALL_FAILED_DEXOPT

Come posso risolvere questo tipo di errore?


sei riuscito a installare correttamente questa applicazione su dispositivi diversi dal tablet Samsung?
Will Tate

1
È necessario incollare l'output di logcat generato quando l'installazione non riesce.
fadden

Ho avuto lo stesso problema su un dispositivo su cui stavo testando (HTC Droid Eris). Avevo una versione precedentemente installata della mia app sul telefono, ho appena disinstallato e reinstallato e andava bene.
ninjasense,

Disinstallare e reinstallare l'app funziona sempre. Cancellare i dati dell'utente o ricreare l'AVD stanno semplicemente facendo lo stesso in un modo che richiede più tempo. La domanda è: esiste un'opzione migliore e più rapida?
bschandramohan,

7
@ChandraMohan NON è vero. Smetti di provare a renderlo vero. Ho formattato il mio dispositivo e ho provato a reinstallare l'app. Genera ancora questo errore!
Artiom Chilaru,

Risposte:


99

Il riavvio dell'emulatore dal Android SDK and AVD Managere selezionando l'opzione Wipe User Dataha risolto questo problema per me.

È possibile trovare l'opzione come evidenziato nell'immagine fornita di seguito:

Cancella l'opzione Dati utente all'avvio dell'emulatore Android


17
E se fosse il mio telefono e non un emulatore?
mtmurdock,

1
@mtmurdock provare adb kill-serverquindi adb start-serverdovrebbe risolvere il tuo problema. Potrebbe esserci un'app più vecchia, quindi disinstallarla prima.
Vikas Patidar,

@mtmurdock Probabilmente hai provato, ma riavviare il telefono ha funzionato per me :)
Dunc

uccidere server e quindi avviare non ha funzionato per me, riavviare l'emulatore e Wiping Data funziona davvero per me.
Shuvo,

75

Questo sembrava essere correlato allo spazio su disco per me. Un emulatore 5.1 appena lanciato si avvia con un errore di "spazio su disco insufficiente" - e guardando le proprietà dell'emulatore, lo spazio predefinito allocato per la memoria interna è di 800 MB che sembra basso.

Soluzione, quindi era di aumentare questo (sono andato a 4 GB). Stranamente l'emulatore si avvia ancora con lo stesso avviso di spazio su disco, ma ripristinandolo in fabbrica (Impostazioni -> Backup e ripristino all'interno dell'emulatore) l'ho risolto interamente per me.

Un po 'strano che non funzioni con le impostazioni predefinite.


2
In effetti, questo è stato risolto il problema che ho riscontrato e il ripristino tramite le impostazioni del telefono. Grazie!
Justin Stanley,

1
Ho provato quasi tutto ma niente ha funzionato tranne questo, grazie
shehzy

1
Dopo 2 ore ho trovato questo commento - grazie per avermi salvato la giornata, ha funzionato!
kilian eller,

1
Ciò ha causato INSTALL_FAILED_DEXOPT anche sul mio emulatore. Avevo aumentato le dimensioni ma avevo bisogno di andare alle impostazioni ed eseguire un ripristino di fabbrica. Risolto il problema.
Dave Thomas,

1
Cristo ... di nuovo questo mi è successo dopo aver aggiornato il mio mac OS. Raddoppiando il mio rimborso per quella soluzione, vai su -> impostazioni ed esegui il ripristino delle impostazioni di fabbrica. Ho dovuto cercare questa domanda solo per ricordare come l'ho risolto ... grazie a Dio per la storia sullo stack di overflow, e sono stato in grado di trovare il mio commento
Dave Thomas,

17

La tua vecchia versione dell'app che stai installando ha librerie / vasetti dipendenti che sono stati modificati. Ho riscontrato questo problema durante l'aggiornamento di altri file jar su cui la mia app stava aggiornando.

Dovrai disinstallare la tua vecchia versione e non dovresti avere più problemi ...

Impostazioni -> Applicazioni -> Gestisci applicazioni -> [Trova e disinstalla la tua app]

Gli errori INSTALL_FAILED_DEXOPT non devono scoppiare. Piace

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


Posso concordare la causa e l'effetto. La stessa situazione si è verificata nel mio caso dopo aver armeggiato con barattoli. Per me questo era solo su dispositivi basati su Android 2.3 Gingerbread, ICS e Lollipop andavano bene.
AlexVPerl,

Sarà un problema quando si carica sul Play Store? o il programma di installazione elimina l'app e la reinstalla?
Eduardo Naveda,

14

Se stai usando Android Studio , prova a pulire il tuo progetto:

Crea> Progetto pulito


12

Sembra che questo messaggio di errore possa avere molte cause diverse. Il caso in cui mi sono imbattuto era su un dispositivo reale (quindi le soluzioni basate sull'emulatore non si applicavano).

Fondamentalmente, quando ciò accade, imposta il filtro Logcat su Verbose o Warn , che ti aiuterà a ottenere maggiori informazioni sulla causa.

Nel mio caso, versioni multiple o in conflitto di JUnit venivano incluse nel progetto su cui stavo lavorando (una grande base di codice esistente). L'app Android che stavo cercando di distribuire aveva diversi progetti di libreria come dipendenze e avevo erroneamente impostato le cose per includere più file jar JUnit.

L'ho scoperto sulla base di una serie di messaggi Logcat. Si noti che la riga WARN indica la causa:

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
Questo è un buon suggerimento Accetto che sia necessario visualizzare l'output di LogCat per vedere qual è il messaggio di errore effettivo. Stavo ricevendo questo errore ed era perché il mio dispositivo aveva poca memoria e non riusciva a decomprimere l'APK. Credo che ci siano diverse ragioni per cui questo errore può essere attivato e la disinstallazione o la cancellazione dei dati dell'utente potrebbe non essere necessaria. Ho pubblicato lo stesso suggerimento come risposta a una domanda simile (duplicata).
Bryan Bedard,

2
Preoccupato, questo è lo stesso punto che stava facendo Bryan Bedard. Ero a corto di spazio - di solito, ricevo un errore come "spazio insufficiente", ma per qualche motivo ho ricevuto questo errore DEXOPT. Logcat ha visualizzato un errore Errore di gonfiaggio: scrittura non riuscita: spazio sul dispositivo rimasto.
mobibob,

12

Ci siamo imbattuti in questo con Android Studio 3.4.1 ma usando un emulatore più vecchio (5.0). Questa procedura (su Mac) ha risolto il problema:

  1. interrompere l'emulatore
  2. cd ~ / .android / avd / [nome emulatore] .avd
  3. rm * .lock
  4. pulire l'emulatore
  5. avviare l'emulatore

3
Fare ciò che è stato menzionato sopra dopo aver aumentato la memoria interna dell'emulatore a 4 GB è l'unica cosa che ha funzionato per me.
dell116,

@ dell116 Non mi sorprende che a volte si debba fare più di una cosa, basandosi solo su tutte le diverse risposte a questa domanda!
Ken,

3
Concordato! E congratulazioni per aver preso il nome utente "Ken".
dell116

Sfortunatamente nessuna delle combinazioni di pulizia / aumento della memoria / cancellazione di nuovo mi ha aiutato. Mi sono arreso.
Can Poyrazoğlu l'

1
@ CanPoyrazoğlu - Anche io ho quasi rinunciato. Penso che gli emulatori debbano essere estremamente sensibili e molte cose possono farli fallire (come evidenziato da tutte le diverse risposte qui a una domanda posta più di otto anni fa). La rimozione dei file .lock è stata la chiave nel mio caso, ma posso sicuramente vedere dove ciò potrebbe non risolvere tutti i problemi.
Ken,

11

Ho cambiato la dimensione della RAM e la capacità di archiviazione interna dell'emulatore. Ora FUNZIONA ... in eclipse AVD manager


2
Questo risolve anche il problema in Android Studio. Avevo solo 200Mb di memoria interna. Aumenta fino a 1 GB e risolto il problema. Lo stesso messaggio di errore ... Grazie !!
Joan Casadellà,

Funziona anche per me. Aumenta da 200 MB!
JohnyTex,

10

prova la mia risposta https://stackoverflow.com/a/34918549/3737254

se usi Android Studio 2.0, DISABILITA la corsa istantanea.

Cordiali saluti, la corsa istantanea è una nuova funzionalità di Android Studio 2.0 (non l'ho mai usato>. <)

come disabilitare: preferenze -> costruzione, esecuzione e distribuzione -> esecuzione istantanea -> disabilita, quindi funziona come per magia

Godere!


Questo era il mio problema durante il test di vecchie API su un emulatore. Dopo aver cambiato questo e una pulizia pulita dell'emulatore ha funzionato!
Ben

8

Avevo bisogno di disabilitare Instant Run per risolvere il problema. Per disabilitare Instant Run su OS X, vai su Android Studio > Preferenze > Build, Execution, Deployment > Instant Run quindi rimuovi il segno di spunta da Enable Instant Run to hot swap code/resource changes on deploy (default enabled).


Questo ha funzionato per il mio dexopt error. Application failed to install. Ho provato questi prima di trovare questo adb kill-server adb start-server:, riavvio di Android Studio e Factory reset del mio dispositivo.
Sherlock

7

L'unica soluzione che ha funzionato per me per risolvere questo problema è stata aumentare la RAM della VM a 4 GB.


6

Ho avuto lo stesso problema oggi con Android Studio su un nuovo dispositivo virtuale. Sembrava che avessi scaricato l' x86_64immagine, ricreando il VD con l' x86immagine equivalente riparata.

Mi aspettavo di ottenere un INSTALL_FAILED_NO_MATCHING_ABISin questo caso, ma in qualche modo ero bloccatoINSTALL_FAILED_DEXOPT


1
Per me è stato il contrario. Tentativo di installazione x86non riuscito. Dopo aver scaricato l'immagine e modificato l'emulatore per x86_64l'errore era sparito. Ho usato l'immagine di sistema dell'API 21.
friederbluemle il

L'opposto ha funzionato anche per me. Ho provato tutto su questo thread prima di provare a usare l' x86_64immagine invece di x86quella. Stavo anche usando un AVD API 21 (Nexus 5).
Renan Ferrari

5

Sto lavorando con Android Studio e ho avuto lo stesso errore.

L'eliminazione della cartella di build del modulo principale ha aiutato. Dopo aver eliminato tutto, torna alla normalità.


4

INSTALL_FAIL_DEXOPT di solito ha a che fare con il limite posto su classes.dex. Su qualsiasi cosa il pre-ICS dexopt fallirà su qualcosa di più di 5 MB. Le versioni recenti di Android utilizzano un buffer da 8 o 16 MB.

Controlla le dimensioni di classes.dex nel tuo APK. Sarebbe anche bello vedere qual è il tuo conteggio dei metodi, poiché dex ha un limite di metodo / campo 65536.


Riferimenti:

Errore durante l'installazione dell'applicazione (INSTALL_FAILED_DEXOPT)

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

Come ridurre il codice - limite del metodo 65k in dex


3

Ho riscontrato questo problema dopo aver abilitato il flag jumboMode in build ( dex.force.jumbo=true). Tutto ha funzionato bene sui nuovi dispositivi Android, ma l'installazione non è riuscita su Gingerbread.

Quindi, se la tua app richiede la modalità jumbo a causa della fastidiosa restrizione 65k, prova a tagliare un po 'di codice / stringhe inutilizzati e a riportare la modalità jumbo su false.


Ho anche appena abilitato la modalità jumbo e ho iniziato a vedere questo durante i test su vecchi dispositivi. Sfortunatamente tornare a false non mi ha risolto il problema. Usando proguard per ridurre l'APK ha fatto.
slott

Abbiamo riscontrato lo stesso problema, la modalità Jumbo non funziona con l'API 10
Henrique de Sousa il

3

classes.dexnon arriva in finale .apk. Gestire gradlew --offline clean && gradlew --offline assembleDebugcose fisse per me ogni volta. Da quel punto puoi iniziare a riavviare l'app da Android Studio.

EDIT: Prima di quello che ho detto sopra vai a Task Manager e uccidi tutto cmd.exee tutti i conhost.exeprocessi (o solo quello in cui aaptsi è bloccato). Altrimenti aaptandrebbe in crash da ora in poi quando lanciato dalla riga di comando con il famigerato errore -1073741819.


Apprezzato: D vale la pena ricordare che i più recenti strumenti di costruzione (2.1.1) e plugin gradle (1.0.0-rc1) funzionano come un incantesimo
Eugen Pechanec,

Beh, non lo so, ho appena installato Android Studio 1.0 e ho dovuto farlo per farlo funzionare.
axnsan,

Prova a uccidere anche java.exe. Quanta RAM hai? Assicurati di avere l'ultima versione di quanto segue: Android Studio 1.0.0-rc4, gradle plug-in Android 1.0.0-rc1, strumenti di creazione 21.1.1. Non vedo l'errore da un po 'di tempo ormai.
Eugen Pechanec,

Gli strumenti di costruzione sono 21.1.1, Android Studio è 1.0 e non so come trovare la versione del plugin Gradle. Ho appena scaricato la versione 1.0 che è apparsa ieri sul sito degli sviluppatori Android ...
axnsan,

Cerca nel tuo build.gradlefile di progetto principale . Tra le dipendenze di buildscript ci dovrebbero essere classpath 'com.android.tools.build:gradle:1.0.0-rc4'.
Eugen Pechanec,

3

Ho riscontrato lo stesso errore e risolto aumentando le dimensioni della memoria interna.

La memoria interna inizialmente era impostata su 32 MB (lo so) e quindi ho installato un paio di apk su di esso, che aveva lasciato meno spazio di quello necessario per l'installazione.


3

verifica lo spazio di archiviazione sul tuo dispositivo


2
Questo aiuta, ho aumentato la RAM e lo spazio del mio dispositivo virtuale, quindi il problema è stato risolto.
Wesely,

2

Ho disinstallato l'app e ho comunque riscontrato l'errore INSTALL_FAILED_DEXOPT. Se stai lavorando con Android Studio / Gradle: Gradle Clean ha fatto il trucco per me, Saluti.


Ho dovuto usare Gradlew, ma ehi ha funzionato! grazie (rimosso anche il pacchetto in dati / dati)
Maxim Geerinck,

2

in build.gradle modifica compilata e build all'ultima versione. e ha funzionato per me.

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

android {
    compileSdkVersion 22
    buildToolsVersion "22"

2

molte risposte qui, ma forse può aiutare qualcuno che ho avuto questo problema con il dispositivo reale e il problema era con D8

prova ad aggiungere questo al tuo gradle.properties e funziona per me

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

1

Stavo riscontrando questo problema durante il tentativo di installazione su dispositivi 2.3 (bene su 4.0.3). Alla fine è stato dovuto a un progetto lib che stavo usando aveva più vasetti che erano per cose già presenti in Android, ad es. Parser HttpClient e XML ecc. Guardandomi logcatmi ha portato a trovare questo perché mi stava dicendo che stava saltando le lezioni perché erano già presente. Bello errore originale inutile lì!


2
Ho lo stesso problema, puoi spiegarmi come hai risolto il problema. Ho dimensioni libs superiori a 7 MB, quindi non mi consente di installare nel dispositivo precedente come 2.3.
Rakki s

Nel mio caso, stavo usando Gradle Build per creare apk e il colpevole era il barattolo del provider di castello gonfiabile. Ho dovuto escludere il modulo 'bcprov-jdk' nelle dipendenze di compilazione del progetto root.
Pawan,

1

Ho avuto questo errore test su un dispositivo reale. Svuotare la cache / disinstallare, riavviare tutto non ha funzionato per me, eliminare il contenuto della cartella di build ha fatto :) (Android Studio)


1

Non esiste una soluzione generica, devi trovare l'errore segnalato sul tuo Logcat per poterlo capire. A volte è una classe che non può essere "rimossa" a causa dell'utilizzo di una classe non disponibile sull'API di destinazione specificata, ad esempio. Oppure potrebbe essere una classe a cui stai facendo riferimento nel tuo codice, ma la libreria in cui si trova non viene impacchettata.


1

Prendi in considerazione l'utilizzo di proguard per ridurre il tuo APK. Ho lo stesso problema se provo a installare un grande APK da 25 MB + su un vecchio dispositivo Samsung Galaxy Ace 2.3.6 senza ridurre / ottimizzare il codice con proguard.

La modalità Jumbo e il riavvio del dispositivo non funzionano.



1

targetSdkVersion 22 // 17 ==========================> impostare questo numero su un valore inferiore o uguale alla versione del sistema operativo Android sui dispositivi potrebbe aiutare

 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

Ho avuto questo problema quando c'erano alcuni caratteri Unicode nei nomi dei miei metodi (a causa, tra l'altro, di copia / incolla da un file powerpoint) che Dalvik non piaceva. Puoi vederlo guardando l'output di Logcat mentre provi a installare l'APK.

Questo era su un dispositivo reale.


0

Risolto correggendo l'ora della data sul telefono (era una data predefinita 01.01.1980) e pulendo il progetto.


0

Avevo cambiato la mia versione del supporto Android versione 4 per SDK 21 e avevo questo errore. Quindi sono tornato alla versione di supporto per la vecchia versione (prima del 21) e ha funzionato. L'errore si stava verificando solo in Android 2.3


0

Ho riscontrato questo problema quando stavo cercando di aggiornare i nuovi strumenti di build 24.0.1. La connessione Internet è stata persa e gli strumenti non sono stati scaricati correttamente, dopo di che ho riscontrato questo errore e ho trascorso molto tempo a tentare di risolverlo. Ma quando ho aggiornato con successo gli strumenti di costruzione, il problema è stato risolto. In bocca al lupo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.