Je développe une application Android à l'aide d'Android 2.2, ma taille d'application APK est de 22.5 MB et je souhaite créer une nouvelle version pour une tablette Samsung. J'ai eu l'erreur suivante:
INSTALL_FAILED_DEXOPT
Comment puis-je résoudre ce genre d'erreur?
Redémarrer l’émulateur depuis le Android SDK and AVD Manager
et sélectionner l’option Wipe User Data
a résolu ce problème.
Vous pouvez trouver l'option telle que surlignée dans l'image ci-dessous:
Votre ancienne version de l'application que vous installez contient 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éférencer.
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.
Si vous utilisez Android Studio , essayez de nettoyer votre projet:
Construire> Nettoyer le projet
Il semble que ce message d'erreur puisse avoir de nombreuses causes différentes. Le cas que j'ai rencontré était sur un vrai périphérique (les solutions de base d'émulateur ne s'appliquaient donc pas).
En règle générale, lorsque cela se produit, définissez votre filtre Logcat sur Verbose ou Warn , ce qui vous aidera à obtenir plus d'informations sur la cause.
Dans mon cas, plusieurs versions ou conflits de JUnit étaient inclus dans le projet sur lequel je travaillais (une grande base de code existante). L'application Android que je tentais de déployer comportait plusieurs dépendances dans plusieurs projets de bibliothèque, et j'avais configuré par erreur les choses pour inclure plusieurs fichiers JAR JUnit.
J'ai découvert ceci basé sur une série de messages de Logcat. Notez que la ligne WARN en 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)
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 votre information, Instant Run 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!
Je devais désactiver Instant Run pour résoudre le problème. Pour désactiver Instant Run sous OS X, accédez à Android Studio > Préférences > Création, exécution, déploiement > Instant Run puis décochez la case Enable Instant Run to hot swap code/resource changes on deploy (default enabled)
.
J'ai changé la taille de RAM et la capacité de stockage interne de l'émulateur Maintenant, il IS est en cours de fonctionnement ... dans le gestionnaire AVD d'Eclipse
J'ai utilisé ceci avec Android Studio 3.4.1 mais en utilisant un émulateur plus ancien (5.0). Cette procédure (sur Mac) corrige le problème:
Je travaille avec Android Studio et a eu la même erreur.
Supprimer le dossier de construction du Modul principal a aidé. Après avoir tout effacé, revenez à la normale.
Cela semblait être lié à l'espace disque pour moi. Un émulateur 5.1 nouvellement lancé démarre avec une erreur «d'espace disque insuffisant» - et en regardant les propriétés de l'émulateur, l'espace alloué par défaut pour le stockage interne est de 800 Mo, ce qui semble faible.
La solution consistait donc à l'augmenter (je suis passé à 4 Go). Bizarrement, l’émulateur s’amorce toujours avec le même avertissement concernant l’espace disque, mais sa réinitialisation en usine (Paramètres -> Sauvegarde et restauration dans l’émulateur) l’a entièrement résolu.
Juste un peu étrange que cela ne fonctionne pas avec les paramètres par défaut.
J'ai eu le même problème aujourd'hui avec Android Studio sur un nouveau périphérique virtuel. Il est apparu que j'avais téléchargé l'image x86_64
, recréant le disque virtuel avec l'image x86
équivalente corrigée.
Je m'attendais à obtenir un INSTALL_FAILED_NO_MATCHING_ABIS
dans ce cas, mais j'ai été coincé avec INSTALL_FAILED_DEXOPT
INSTALL_FAIL_DEXOPT concerne généralement la limite imposée à classes.dex. Sur tout ce qui précède ICS, dexopt échouera sur tout ce qui dépasse 5 Mo. Les versions récentes d'Android utilisent un tampon de 8 ou 16 Mo.
Vérifiez la taille de classes.dex dans votre APK. Il serait également bon de voir quel est le nombre de vos méthodes, car dex a une limite de méthode/champ de 65 536.
Références:
Erreur lors de l'installation de l'application (INSTALL_FAILED_DEXOPT)
classes.dex
n'atteint pas le .apk
final. Exécuter gradlew --offline clean && gradlew --offline assembleDebug
corrige des problèmes pour moi à chaque fois. À partir de ce moment, vous pouvez relancer l'application depuis Android Studio.
EDIT: Avant ce que j'ai dit ci-dessus, allez dans le Gestionnaire des tâches et supprimez tous les processus cmd.exe
et conhost.exe
(ou simplement celui dans lequel aapt
s'est coincé). Sinon, aapt
planterait à partir de maintenant lorsqu'il serait lancé en ligne de commande avec la fameuse erreur -1073741819
.
J'ai eu la même erreur et je l'ai corrigé en augmentant la taille de la mémoire interne.
La mémoire interne avait été initialement réglée sur 32 Mo (je sais), puis j’ai installé quelques apks dessus, ce qui laissait moins d’espace que nécessaire.
J'ai rencontré ce problème après avoir activé l'indicateur jumboMode dans la construction (dex.force.jumbo=true
). Tout fonctionnait bien sur les nouveaux appareils Android, mais l'installation a échoué sur Gingerbread.
Par conséquent, 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 définir le mode Jumbo sur false.
J'ai eu l'application désinstallée 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,.
dans build.gradle change compilé et construit à la dernière version. et cela a fonctionné pour moi.
================
Android {
compileSdkVersion 22
buildToolsVersion "22"
targetSdkVersion 22 // 17 =========================> définir ce nombre inférieur ou égal à la version du système d'exploitation Android sur les appareils pourrait 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
}
Il n'y a pas de solution générique, vous devez trouver l'erreur signalée sur votre Logcat pour pouvoir la résoudre. Parfois, il s'agit d'une classe qui ne peut pas être «désaxée» en raison de l'utilisation d'une classe non disponible par exemple sur l'API cible spécifiée. Ou bien il pourrait 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 empaquetée.
Je rencontrais ce problème lorsque j'essayais d'installer sur des périphériques 2.3 (très bien sur 4.0.3). En fin de compte, cela était dû à un projet de lib que j'utilisais avait plusieurs jars qui étaient destinés à des choses déjà dans Android, par exemple. Analyseurs HttpClient et XML, etc. Regarder logcat
m'a amené à trouver ceci, car il était en train de me dire qu'il sautait des classes, car elles étaient déjà présentes. Belle erreur originale inutile ici!
Pensez à utiliser proguard pour réduire votre APK. J'ai le même problème si j'essaye d'installer un grand 25 Mo + APK sur un vieux périphérique Samsung Galaxy Ace 2.3.6 sans rétrécir/optimiser le code avec proguard.
Le mode Jumbo et le redémarrage de l'appareil ne fonctionnent pas.
Dans mon cas, il s’agissait d’un bogue dans le plugin Kotlin, version 1.1.51.
https://youtrack.jetbrains.com/issue/KT-20034
Cette erreur est apparue sur les anciens appareils (API 16).
Ceci a été corrigé en supprimant les annotations @Parcelize et en les remplaçant par ce générateur de code: https://github.com/nekocode/Android-parcelable-intellij-plugin-kotlin
J'ai eu cette erreur de test sur un appareil réel. Effacer le cache/désinstaller, tout redémarrer n'a pas fonctionné pour moi, effacer le contenu du dossier de compilation a fait :)
vérifier l'espace de stockage sur votre appareil
J'ai eu ce problème quand il y avait des caractères Unicode dans mes noms de méthodes (en raison de tout, copier/coller depuis un fichier PowerPoint) que Dalvik n'a pas aimé. Vous pouvez le voir en regardant la sortie Logcat tout en essayant d'installer l'APK.
C'était sur un vrai appareil.
Dans Android Studio, cliquez sur Fichier -> Invalider les caches/redémarrer. Cela a fait le tour pour moi quand j'ai eu cette erreur quand j'ai eu cette erreur sur le périphérique pas émulateur.
Résolu en corrigeant l'heure sur le téléphone (il s'agissait d'une date par défaut du 01.01.1980) et en nettoyant le projet.
J'ai rencontré ce problème lorsque j'essayais de mettre à jour les nouveaux outils de génération 24.0.1. La connexion Internet a été perdue et les outils n'ont pas été téléchargés correctement. 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 mes outils de construction, le problème était résolu. Bonne chance.
Peut-être que cela aidera:
J'ai trouvé qu'il y avait une raison à ce problème: pas assez d'espace sur le mobile. Donc, je supprime plusieurs applications de mobile et c'est corrigé.
La seule solution qui m'a permis de résoudre ce problème consistait à augmenter la RAM de la machine virtuelle à 4 Go.
J'avais changé ma version du support 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 se produisait uniquement dans Android 2.3
De plus, si vous utilisez encore Eclipse, essayez de nettoyer votre projet:
Projet> Nettoyer ...
Pour moi, c'est proguard qui causait INSTALL_FAILED_DEXOPT sur certains appareils Samsung avec Android 5.x.
À savoir, j'ai dû ajouter ceci à proguard - je ne sais pas pourquoi cela a aidé.
-keepattributes LocalVariableTable
Comme cela semble être un problème que j'ai moi-même rencontré à plusieurs reprises et cette fois-ci aucune des solutions partagées ne m'a aidé, je publierai tout de même ce qui m'a aidé personnellement et ce que je pense pouvoir aider quelqu'un d'autre à l'avenir:
Accédez au répertoire de votre projet et recherchez le fichier build/intermediates/dex-cache/cache. Supprimez-le - comme son nom l'indique, il s'agit d'un fichier dex mis en cache qui peut être obsolète si vous avez modifié les dépendances de votre projet, la version des outils de génération, etc.
Assurez-vous que tous les SDK nécessaires sont installés et Gradle vise la bonne version.
J'avais le même problème, mais cela a été causé par la mise à jour de mon appareil sous Android 5.0, puis par l'oubli de modifier toutes mes versions pour le cibler.
J'ai fait face à ce problème car il y avait un décalage avec les bibliothèques que j'utilisais
Résolu en mettant à jour le sdk Android au plus tard. Vérifiez le gestionnaire de SDK s'il affiche la mise à jour, puis mettez à jour complètement, nettoyez votre projet, puis exécutez-le, il fonctionnera :)
Redémarrez votre appareil.
Dans mon cas, l'application fonctionne dans la plupart des appareils, à l'exception d'un seul: un téléphone portable trop vieux et en panne depuis peu, l'application a renvoyé cette erreur même sans l'avoir installée une fois.
L'erreur est résolue en supprimant le dossier de construction de votre application principale. Il sera recréé à nouveau.