Comment résoudre l'erreur INSTALL_FAILED_DEXOPT?


181

Je développe une application Android sous Android 2.2, la taille de mon APK d'application est de 22,5 Mo, et je souhaite créer une nouvelle version pour une tablette Samsung. J'ai eu l'erreur suivante:

INSTALL_FAILED_DEXOPT

Comment résoudre ce genre d'erreur?


avez-vous réussi à installer cette application sur des appareils autres que la tablette Samsung?
Will Tate

1
Vous devez coller la sortie logcat générée lorsque l'installation échoue.
fadden

J'ai eu le même problème sur un appareil sur lequel je testais (HTC Droid Eris). J'avais une version précédemment installée de mon application sur le téléphone, je viens de la désinstaller et de la réinstaller et tout allait bien.
ninjasense

La désinstallation et la réinstallation de l'application fonctionnent toujours. Effacer les données utilisateur ou recréer l'AVD, c'est tout simplement faire la même chose de manière plus longue. La question est: Y a-t-il une option meilleure et plus rapide?
bschandramohan

7
@ChandraMohan ce n'est PAS vrai. Arrêtez d'essayer de le rendre vrai. J'ai formaté mon appareil et essayé de réinstaller l'application. Il jette toujours cette erreur!
Artiom Chilaru

Réponses:


99

Le redémarrage de l'émulateur à partir de Android SDK and AVD Manageret la sélection de l'option Wipe User Dataa résolu ce problème pour moi.

Vous pouvez trouver l'option mise en évidence dans l'image ci-dessous:

Wipe User Data option when starting android emulator


17
Et si c'était mon téléphone et non un émulateur?
mtmurdock

1
@mtmurdock try devrait adb kill-serveralors adb start-serverrésoudre votre problème. Peut-être qu'une ancienne application existe, puis désinstallez-la d'abord.
Vikas Patidar

@mtmurdock Vous avez probablement essayé, mais le redémarrage du téléphone a fonctionné pour moi :)
Dunc

tuer le serveur puis démarrer n'a pas fonctionné pour moi, le redémarrage de l'émulateur et de l'effacement des données fonctionne pour moi en fait.
Shuvo

75

Cela semblait lié à l'espace disque pour moi. Un émulateur 5.1 nouvellement roulé démarre avec une erreur «espace disque faible» - et en regardant les propriétés de l'émulateur, l'espace par défaut alloué pour le stockage interne est de 800 Mo, ce qui semble faible.

La solution a donc été d'augmenter cela (je suis passé à 4 Go). Curieusement, l'émulateur démarre toujours avec le même avertissement d'espace disque, mais sa réinitialisation d'usine (Paramètres -> Sauvegarder et restaurer dans l'émulateur) l'a entièrement résolu pour moi.

Juste un peu étrange que cela ne fonctionne pas directement avec les paramètres par défaut.


2
En effet, c'est ce que le problème que j'ai eu et la réinitialisation via les paramètres du téléphone l'a résolu pour moi. Merci!
Justin Stanley

1
J'ai presque tout essayé mais rien n'a fonctionné sauf celui-ci, merci
shehzy

1
Après 2 heures j'ai trouvé ce commentaire - merci d'avoir sauvé ma journée, travaillé!
kilian eller

1
Cela a également provoqué INSTALL_FAILED_DEXOPT sur mon émulateur. J'avais augmenté la taille mais je devais accéder aux paramètres et exécuter une restauration d'usine. Cela a résolu le problème.
Dave Thomas

1
Christ ... encore une fois, cela m'est arrivé après la mise à jour de mon Mac OS. Doubler mon remboursement de cette solution goto -> paramètres et exécuter la restauration d'usine. J'ai dû rechercher cette question juste pour me souvenir de la façon dont je l'ai résolue ... Dieu merci pour l'histoire du débordement de pile, et j'ai pu trouver mon commentaire
Dave Thomas le

17

Votre ancienne version de l'application que vous installez comporte des bibliothèques / fichiers JAR dépendants qui ont été modifiés. J'ai rencontré ce problème lors de la mise à jour d'autres fichiers jar que mon application était en train de réfréner.

Vous devrez désinstaller votre ancienne version et vous ne devriez plus avoir de problèmes ...

Paramètres -> Applications -> Gérer les applications -> [Rechercher et désinstaller votre application]

Les erreurs INSTALL_FAILED_DEXOPT ne doivent pas éclater. Comme

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


Je peux être d'accord sur la cause et l'effet. La même situation s'est produite dans mon cas après avoir bricolé des bocaux. Pour moi, c'était uniquement sur les appareils Android 2.3 Gingerbread, ICS et Lollipop allaient bien.
AlexVPerl

Cela posera-t-il un problème lors du téléchargement sur le Play Store? ou le programme d'installation supprime-t-il l'application et la réinstalle?
Eduardo Naveda

14

Si vous utilisez Android Studio , essayez de nettoyer votre projet:

Construire> Projet propre


12

Il semble que ce message d'erreur puisse avoir de nombreuses causes différentes. Le cas que j'ai rencontré était sur un appareil réel (donc les solutions de base d'émulateur ne s'appliquaient pas).

En gros, lorsque cela se produit, réglez votre filtre Logcat à verbeux ou WARN , qui vous aidera à obtenir plus d' informations sur la cause.

Dans mon cas, plusieurs versions ou en conflit de JUnit étaient incluses dans le projet sur lequel je travaillais (une grande base de code existante). L'application Android que j'essayais de déployer avait plusieurs projets de bibliothèque en tant que dépendances, et j'avais configuré par erreur les choses pour inclure plusieurs fichiers jar JUnit.

J'ai découvert cela sur la base d'une série de messages Logcat. Notez que la ligne WARN donne la cause:

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
C'est une bonne suggestion. Je suis d'accord que vous devriez afficher la sortie de LogCat pour voir quel est le message d'erreur réel. J'obtenais cette erreur et c'était parce que mon appareil manquait de stockage et qu'il ne parvenait pas à décompresser l'APK. Je pense qu'il existe plusieurs raisons pour lesquelles cette erreur peut être déclenchée et que la désinstallation ou la suppression des données utilisateur peut être inutile. J'ai posté cette même suggestion en réponse à une question similaire (en double).
Bryan Bedard

2
DÉSOLÉ, C'EST LE MÊME POINT QUE BRyan Bedard FAIT. J'étais à court d'espace - généralement, j'obtiens une erreur comme "espace insuffisant", mais pour une raison quelconque, j'ai eu cette erreur DEXOPT. Logcat a affiché une erreur Zip gonfler: échec d'écriture: aucun espace restant sur l'appareil.
mobibob

12

Ran dans cela avec Android Studio 3.4.1 mais en utilisant un émulateur plus ancien (5.0). Cette procédure (sur Mac) a résolu le problème:

  1. arrêter l'émulateur
  2. cd ~ / .android / avd / [nom de l'émulateur] .avd
  3. rm * .lock
  4. effacer l'émulateur
  5. démarrer l'émulateur

3
Faire ce qui est mentionné ci-dessus après avoir augmenté le stockage interne de l'émulateur à 4 Go est la seule chose qui a fonctionné pour moi.
dell116

@ dell116 Je ne suis pas surpris que parfois plus d'une chose devra être faite, juste en fonction de toutes les différentes réponses à cette question!
Ken

3
D'accord! Et félicitations pour avoir accroché le nom d'utilisateur "Ken".
dell116

Malheureusement, aucune des combinaisons d'essuyage / augmentation du stockage / essuyage ne m'a encore aidé. J'ai abandonné.
Can Poyrazoğlu

1
@ CanPoyrazoğlu - J'ai failli abandonner aussi. Je pense que les émulateurs doivent être extrêmement sensibles et beaucoup de choses peuvent les faire échouer (comme en témoignent toutes les différentes réponses ici à une question posée il y a plus de huit ans). La suppression des fichiers .lock était la clé dans mon cas, mais je peux certainement voir où cela pourrait ne pas résoudre tous les problèmes.
Ken le

11

J'ai changé la taille de la RAM et la capacité de stockage interne de l'émulateur Now IT IS Working ... dans eclipse AVD Manager


2
Cela résout également le problème dans Android Studio. Je n'avais que 200 Mo de stockage interne. Augmentez jusqu'à 1 Go et le problème est résolu. La même erreur de message ... Merci !!
Joan Casadellà

Fonctionne aussi pour moi. Augmentez de 200 Mo!
JohnyTex

10

essayez ma réponse https://stackoverflow.com/a/34918549/3737254

si vous utilisez android studio 2.0, désactivez l'exécution instantanée.

Pour info, l'exécution instantanée est une nouvelle fonctionnalité d'Android Studio 2.0 (je ne l'ai jamais utilisée>. <)

comment désactiver: préférences -> construction, exécution et déploiement -> exécution instantanée -> désactiver, puis fonctionne comme par magie

Prendre plaisir!


C'était mon problème lors du test d'anciennes API sur un émulateur. Après avoir changé cela et un nettoyage propre de l'émulateur, cela a fonctionné!
Ben

8

J'avais besoin de désactiver Instant Run pour résoudre le problème. Pour désactiver Instant Run sur OS X, accédez à Android Studio > Préférences > Build, Execution, Deployment > Instant Run, puis supprimez la coche Enable Instant Run to hot swap code/resource changes on deploy (default enabled).


Cela a fonctionné pour mon dexopt error. Application failed to install. J'ai essayé ces derniers avant de trouver ceci adb kill-server adb start-server:, redémarrage d'Android Studio et réinitialisation d'usine de mon appareil.
Sherlock

7

La seule solution qui a fonctionné pour moi pour résoudre ce problème était d'augmenter la RAM de la VM à 4 Go.


6

J'ai eu le même problème aujourd'hui avec Android Studio sur un nouvel appareil virtuel. Il est apparu que j'avais téléchargé l' x86_64image, recréant le VD avec l' x86image équivalente corrigée.

Je m'attendais à obtenir un INSTALL_FAILED_NO_MATCHING_ABISdans ce cas, mais d'une manière ou d'une autre, j'étais coincé avecINSTALL_FAILED_DEXOPT


1
Pour moi, c'était le contraire. La tentative d'installation sur a x86échoué. Après avoir téléchargé l'image et changé l'émulateur, x86_64l'erreur a disparu. J'ai utilisé l'image système API 21.
friederbluemle

Le contraire a fonctionné pour moi aussi. J'ai tout essayé sur ce fil avant d'essayer d'utiliser l' x86_64image au lieu de celle- x86ci. J'utilisais également un API 21 AVD (Nexus 5).
Renan Ferrari

5

Je travaille avec Android Studio et j'ai eu la même erreur.

La suppression du dossier de construction du module principal a aidé. Après avoir tout supprimé, revenez à la normale.


4

INSTALL_FAIL_DEXOPT a généralement à voir avec la limite placée sur classes.dex. Sur tout ce qui est pré-ICS, dexopt échouera sur tout ce qui dépasse 5 Mo. Les versions récentes d'Android utilisent une mémoire tampon de 8 ou 16 Mo.

Vérifiez la taille de classes.dex dans votre APK. Il serait également bon de voir quel est votre nombre de méthodes, car dex a une limite de 65536 méthodes / champs.


Références:

Erreur lors de l'installation de l'application (INSTALL_FAILED_DEXOPT)

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

Comment réduire le code - Limite de méthode de 65k dans Dex


3

J'ai rencontré ce problème après avoir activé le drapeau jumboMode dans build ( dex.force.jumbo=true). Tout a bien fonctionné sur les appareils Android plus récents, mais l'installation a échoué sur Gingerbread.

Donc, si votre application nécessite le mode jumbo en raison de la restriction agaçante de 65k, essayez de couper certains codes / chaînes inutilisés et de redéfinir le mode jumbo sur false.


Je viens également d'activer le mode jumbo et j'ai commencé à voir cela lors de tests sur d'anciens appareils. Malheureusement, revenir à faux n'a pas résolu le problème pour moi. L'utilisation de proguard pour réduire l'APK l'a fait.
slott

Nous avons rencontré le même problème, le mode Jumbo ne fonctionne pas avec l'API 10
Henrique de Sousa

3

classes.dexne parvient pas à la finale .apk. Courir gradlew --offline clean && gradlew --offline assembleDebugdes choses fixes pour moi à chaque fois. À partir de là, vous pouvez recommencer à lancer l'application depuis Android Studio.

EDIT: Avant que j'ai dit ci - dessus pour aller Gestionnaire des tâches et tuer tous cmd.exeet les conhost.exeprocessus (ou tout simplement celui qui a aaptobtenu bloqué). Sinon, aaptcela planterait à partir de maintenant lors du lancement à partir de la ligne de commande avec l'erreur infâme -1073741819.


Apprécié: Il convient de mentionner que les derniers outils de construction (2.1.1) et le plugin gradle (1.0.0-rc1) fonctionnent comme un charme
Eugen Pechanec

Eh bien, je ne sais pas à ce sujet, je viens d'installer Android Studio 1.0 et j'ai dû le faire pour le faire fonctionner.
axnsan

Essayez également de tuer tous les java.exe. Combien de RAM avez-vous? Assurez-vous de disposer de la dernière version des éléments suivants: Android Studio 1.0.0-rc4, gradle android plugin 1.0.0-rc1, build tools 21.1.1. Je n'ai pas vu l'erreur depuis un certain temps maintenant.
Eugen Pechanec

Les outils de construction sont 21.1.1, Android Studio est 1.0 et je ne sais pas comment trouver la version du plugin gradle. Je viens de télécharger la version 1.0 qui est apparue hier sur le site des développeurs Android ...
axnsan

Regardez dans votre build.gradlefichier de projet racine . Parmi les dépendances buildscript, il devrait y en avoir classpath 'com.android.tools.build:gradle:1.0.0-rc4'.
Eugen Pechanec

3

J'ai eu la même erreur et je l'ai corrigée en augmentant la taille du stockage interne.

Le stockage interne était initialement réglé à 32 Mo (je sais), puis j'ai installé quelques apks dessus, ce qui avait laissé moins d'espace que ce qui était nécessaire pour celui à installer.


3

vérifier l'espace de stockage sur votre appareil


2
Cela aide, j'ai augmenté la RAM et l'espace de mon appareil virtuel, puis le problème est résolu.
Wesely

2

J'ai fait désinstaller l'application et j'ai quand même eu l'erreur INSTALL_FAILED_DEXOPT. Si vous travaillez avec Android Studio / gradle: gradle clean a fait l'affaire pour moi, Cheers.


J'ai dû utiliser gradlew, mais bon ça a marché! merci (également supprimé le paquet dans les données / données)
Maxim Geerinck

2

dans build.gradle, le changement est compilé et construit vers la dernière version. et cela a fonctionné pour moi.

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

android {
    compileSdkVersion 22
    buildToolsVersion "22"

2

beaucoup de réponses ici, mais peut-être que cela peut aider quelqu'un J'ai eu ce problème avec un appareil réel et le problème était avec D8

essayez d'ajouter ceci à votre gradle.properties et cela fonctionne pour moi

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

1

J'avais ce problème en essayant d'installer sur des appareils 2.3 (bien sur 4.0.3). Il a fini par être en raison d'un projet lib j'utilisais eu plusieurs pots qui étaient pour des choses déjà android par exemple HttpClient et parseurs XML , etc. En regardant logcatm'a amené à trouver ce qu'il me disait qu'il sautait des cours en raison de leur être déjà présent. Belle erreur d'origine inutile là-bas!


2
J'ai le même problème. Pouvez-vous expliquer comment vous avez résolu ce problème. J'ai une taille de bibliothèque supérieure à 7 Mo, donc cela ne me permet pas d'installer dans le périphérique précédent comme 2.3.
Rakki s

Dans mon cas, j'utilisais gradle build pour créer apk et le coupable était le pot de fournisseur de château gonflable. J'ai dû exclure le module 'bcprov-jdk' dans les dépendances de compilation du projet racine.
Pawan

1

J'ai eu ce test d'erreur sur un vrai appareil. Effacer le cache / désinstaller, tout redémarrer n'a pas fonctionné pour moi, la suppression du contenu du dossier de construction a fonctionné :) (Android studio)


1

Il n'y a pas de solution générique, vous devez trouver l'erreur signalée sur votre Logcat pour pouvoir la comprendre. Parfois, c'est une classe qui ne peut pas être «dexed» en raison de l'utilisation d'une classe non disponible sur l'API cible spécifiée par exemple. Ou il peut s'agir d'une classe à laquelle vous faites référence dans votre code, mais la bibliothèque dans laquelle elle se trouve n'est pas en cours d'empaquetage.


1

Pensez à utiliser proguard pour réduire votre APK. J'ai le même problème si j'essaie d'installer un grand fichier APK de 25 Mo + sur un ancien appareil Samsung Galaxy Ace 2.3.6 sans réduire / optimiser le code avec proguard.

Le mode Jumbo et le redémarrage de l'appareil ne fonctionnent pas.



1

targetSdkVersion 22 // 17 ==========================> définir ce nombre inférieur ou égal à la version du système d'exploitation Android sur les appareils peut aider

 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

J'ai eu ce problème quand il y avait des caractères Unicode dans mes noms de méthodes (à cause, de toutes choses, de copier / coller à partir d'un fichier powerpoint) que Dalvik n'aimait pas. Vous pouvez le voir en regardant la sortie de Logcat tout en essayant d'installer l'APK.

C'était sur un vrai appareil.


0

Résolu en corrigeant la date et l'heure sur le téléphone (c'était une date par défaut le 01.01.1980) et en nettoyant le projet.


0

J'avais changé ma version de la prise en charge de la version 4 d'Android pour SDK 21 et j'avais cette erreur. Je suis donc retourné à la version de support de l'ancienne version (avant 21) et cela a fonctionné. L'erreur ne se produisait que dans Android 2.3


0

J'ai rencontré ce problème lorsque j'essayais de mettre à jour les nouveaux outils de construction 24.0.1. La connexion Internet a été perdue et les outils n'ont pas été téléchargés avec succès, après cela, j'ai eu cette erreur et j'ai passé beaucoup de temps à essayer de la résoudre. Mais lorsque j'ai mis à jour avec succès les outils de construction, le problème est résolu. Bonne chance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.