Dans mon application Android, j'obtiens toujours VerifyErrors! Et je ne peux pas comprendre pourquoi. Chaque fois que j'inclus un JAR externe, j'obtiens toujours VerifyErrors lorsque j'essaie de lancer mon application (sauf pour une fois, lorsque j'ai inclus Apache Log4j.)
J'ai l'habitude de contourner ce problème en prenant la source de la bibliothèque et en l'ajoutant à mon projet, mais j'essaye de mettre la bibliothèque cliente GData .
Je peux obtenir cela dans la source, mais ce sont des dépendances (mail.jar, activation.jar, servlet-api.jar) Je ne peux pas, donc j'obtiens des erreurs de vérification. Je voudrais aller une fois pour toutes à la racine de ce problème. J'ai regardé sur Internet, mais ils semblent tous parler de fichiers de classe incomplets? dont je ne sais pas.
la source
Réponses:
Android utilise un format de fichier de classe différent. Exécutez-vous les fichiers JAR tiers via l'outil «dx» fourni avec le SDK Android?
la source
Regardez LogCat et voyez ce qui cause l'erreur de vérification. Il s'agit probablement d'une méthode dans une classe java.lang qui n'est pas prise en charge au niveau du SDK Android que vous utilisez (par exemple, String.isEmpty ()).
la source
Des développeurs Android :
La sortie de "adb logcat" indique la classe qui n'a pas pu être trouvée ainsi que la classe qui a la mauvaise référence. L'emplacement est identifié jusqu'à l'instruction spécifique de Dalvik. L'astuce consiste à regarder dans les journaux au-dessus de l'exception.
la source
WARN/dalvikvm(1052): VFY: unable to resolve static method 475: Ljavax/xml/datatype/DatatypeFactory;.newInstance ()Ljavax/xml/datatype/DatatypeFactory;
(maintenant pour savoir comment faire sans DatatypeFactory)Pour que cela fonctionne, vous devez ajouter le fichier jar de la bibliothèque à l'un des dossiers source (même si vous l'avez déjà ajouté en tant que bibliothèque eclipse, vous devez toujours l'ajouter en tant que source).
la source
Cela m'est arrivé maintenant. L'erreur a été causée car j'utilisais des méthodes d'un SDK plus récent que mon appareil avait.
L'appareil Android 1.5 a installé un apk en utilisant ceci:
la source
J'ai trouvé un cas intéressant. J'utilise:
Ainsi, certaines des nouvelles fonctionnalités d'Android 4 ne sont pas implémentées dans Android 2.3 comme
ImageView.setLayerType
. Pour éviter les erreurs d'exécution simplement:Cette approche doit également être utilisée avec la gestion des exceptions:
NetworkOnMainThreadException
n'est pas implémenté dans Android 2.3 donc lorsque la classe est chargée (et pas avant!), l'exceptionjava.lang.VerifyError
se produit.la source
java.lang.ReflectiveOperationException
ce qui n'est pas inclus dans les anciennes versions d'Android (par exemple 4.2), mais Lint ne m'a pas prévenu à ce sujet ...CameraAccessException
, qui est introduit dans Android 5.0, mais lorsque je l'exécute sur un appareil Android 4.3, VerifyError est levé.Si vous utilisez Retrolambda, vous avez peut-être ajouté une méthode statique à une interface (qui n'est autorisée que dans Java 8).
la source
Cela peut également se produire en raison d'une erreur de limite de référencement sur les versions Lollypop ci-dessous, où il est limité jusqu'à une taille maximale de 65K
Solution possible pour le problème ci-dessus
Étape 1:
Add android-support-multidex.jar to your project. The jar can be found in your Android SDK folder /sdk/extras/android/support/multidex/library/libs
Étape 2: étendez votre application avec MultiDexApplication, par exemple
Étape 3: remplacer attachBaseContext
Étape 4: l'étape suivante consiste à ajouter ce qui suit à la partie Android de vos applications build.gradle
Étape 5: Enfin, en suivant la partie générale de vos applications build.gradle
Pour plus de détails, veuillez vérifier
https://developer.android.com/tools/building/multidex.html
la source
Dans mon cas, cela s'est produit lorsque j'ai mis à jour Eclipse Indigo vers Eclipse Juno: je ne sais pas quelle est la vraie raison, mais mon projet Android sur lequel je travaille depuis longtemps a cessé de fonctionner à cause de cette exception.
Après plusieurs heures à essayer de résoudre ce problème, j'ai trouvé la solution pour moi.
Dans mon projet Android, j'utilise un autre projet (par exemple, "MyUtils") qui se trouve dans le même espace de travail. Donc, j'avais besoin de faire ce qui suit:
Faites un clic droit sur le projet Android -> Chemin de construction -> Configurer le chemin de construction
Maintenant, allez dans l'onglet "Order and Export" et cochez "MyUtils". Voilà: je me suis débarrassé de cette exception ennuyeuse.
la source
Je rétrograde la version gradle de 2.0.0-alpha2 à 1.5.0 qui a résolu ce problème.
la source
Le problème pourrait également être causé par un décalage entre deux projets androïdes. Par exemple, si vous avez développé une bibliothèque Android en utilisant le package "com.yourcompany", alors vous avez le projet de l'application principale utilisant le même package que le package de base. Supposons ensuite que vous souhaitiez modifier la version de votre application principale, afin de modifier les valeurs du fichier manifeste: code de version et nom de version. Si vous exécutez votre application sans modifier ces valeurs pour la bibliothèque, vous obtiendrez une erreur de vérification lors de tout appel d'une méthode sur un objet de la bibliothèque.
la source
J'ai eu le même problème. Je construisais avec 2.1 r1 et mis à jour à 2.1 r3 avec le nouvel adt 17. J'avais vérifié des erreurs sur le mail.jar de javamail et cela me rendait fou. Voici comment j'ai résolu le problème:
J'ai essayé une reconstruction et cela a échoué. J'ai supprimé le répertoire libs / en tant que dossier source et supprimé les références aux 3 fichiers jar dans le chemin de construction. Ensuite, j'ai à nouveau ajouté le dossier libs / et ajouté chaque jar dans le dossier libs / au chemin de construction. Maintenant, cela fonctionne comme prévu. C'est une solution de contournement étrange mais cela a fonctionné pour moi.
la source
Dans
Eclipse 4.x
, si vous rencontrez ce problème, essayez ci-dessous:la source
J'ai ce problème après une mise à jour du SDK. Le compilateur a eu des problèmes avec mes bibliothèques externes. J'ai fait ceci: clic droit sur le projet, puis "Outils android> ajouter une bibliothèque suport ..." cette installation sur ma bibliothèque de projet "android-support-v4.jar".
la source
java.lang.VerifyError
signifie que votre bytecode compilé fait référence à quelque chose qu'Android ne peut pas trouver au moment de l'exécution. Cette verifyError ne me pose que kitkat4.4 et la version inférieure pas dans la version ci-dessus, même si j'ai exécuté la même version dans les deux appareils. quand j'ai utilisé l'analyseur jackson json d'une ancienne version, cela se voitjava.lang.VerifyError
Ensuite, j'ai changé la dépendance à la dernière version 2.2 à 2.7 sans la bibliothèque de base (lorsque j'inclus core2.7, cela donne le verifyError), alors cela fonctionne. ce qui signifie que les méthodes et autres contenus de core sont migrés vers la dernière version de Databind2.7 . Cela corrige mes problèmes.
la source
Je reçois également VerfiyError ... je ne trouve pas de vraie raison. Cela aide à envelopper les nouvelles lignes de code dans une méthode (Eclipse, 'Extract Method ...'). Donc, dans mon cas, la raison n'est pas une méthode non prise en charge.
la source
J'ai eu un problème très similaire. J'avais ajouté Apache POI jars et un problème est apparu lors de la mise à jour vers Android SDK 22.3.
J'ai fait vérifier les bibliothèques privées Android, donc ce n'était pas le problème courant avec le SDK Android. J'ai décoché tous les jars Apache POI et les ai ajoutés un par un. J'ai trouvé que poi-3.9-20121203.jar devrait être avant poi-ooxml-3.9-20121203.jar . Sinon, cela ne fonctionnera pas.
la source
Si vous avez des tests, essayez de commenter cette ligne de votre
build.grade
fichier:Pour moi, cela a provoqué des exceptions VerifyError sur les classes qui utilisent les fonctionnalités de Java 1.7, en particulier les instructions de commutation de chaîne.
la source
J'ai eu le même problème après avoir fait un git pull.
Solution: Construire -> Nettoyer le projet.
J'espère que cela t'aides.
la source
J'ai trouvé un autre cas.
Conditions:
Et le résultat est boom! java.lang.VerifyError lors de la tentative d'accès à la classe qui utilise cette interface. On dirait qu'Android (4.4. * Dans mon cas) n'aime pas les méthodes statiques dans les interfaces. La suppression de la méthode statique de l'interface fait disparaître VerifyError.
la source
J'ai aussi eu ce problème, tout comme mes pots dans une bibliothèque utilisateur ...
La façon dont j'ai résolu ce problème était de les ajouter au dossier lib, puis de les ajouter dans les propriétés de construction dans eclipse ...
La première fois que j'ai fait cela, cela n'a pas fonctionné, mais ensuite je les ai supprimés et les ai relus à nouveau et cela a commencé à fonctionner ...
un peu étrange! mais travaille maintenant tout le temps.
Bonne chance
la source
J'ai codé des méthodes / classes d'API Android qui se trouvent dans le SDK 2.1 et j'essayais de l'exécuter sur l'émulateur Android 1.6. Alors j'ai eu cette erreur.
SOLUTION: l'a changé pour corriger la version de l'émulateur.
CELA A FONCTIONNÉ POUR MOI .. Merci.
la source
Pour la postérité, je viens de recevoir cette erreur parce que j'utilisais
Arrays.copyOf()
une méthode qui n'est pas prise en charge par Java 1.5 qui correspond au niveau Android 4. Parce que j'utilisais des bibliothèques développées sous 1.6, elles se sont bien compilées. Je n'ai vu les problèmes que lorsque j'ai déplacé la classe en question vers mon projet Android - alors l'erreur a été mise en évidence.Sur cette ligne, j'essayais de faire un
new DaoConfigArray
et cette classe avait la ligne suivante:Ce qui a rendu les choses encore plus compliquées, c'est que la ligne 71 indiquait une
ThreadLocal
initialisation que je pensais être la raison du problème au départ.la source
J'ai dû supprimer les projets dépendants et à la place, compiler les projets dépendants sont des jar et les inclure dans le dossier libs.
la source
Je suis sûr que ma cause était différente de la vôtre, mais comme c'est l'un des meilleurs résultats lors de la recherche de "Android java.lang.VerifyError", j'ai pensé l'enregistrer ici pour la postérité.
J'ai eu quelques cours du genre:
Et une méthode qui a fait:
Tant que ce code était présent dans le fichier, j'obtiendrais un VerifyError la première fois que la classe contenant cette méthode était chargée. Le diviser en deux méthodes distinctes (une qui ne traitait que des B et une qui ne traitait que des C) résolvait le problème.
la source
Dans mon cas, cette erreur se produit car mon service google-play n'est pas le plus récent .
Si votre projet ne prend pas en charge une classe dans le .jar, cette erreur se produit (par exemple ImageView.setLayerType, AdvertisingIdClient, etc.).
la source
Je viens d'identifier une autre situation où cela se produit, non seulement en raison de libs et non de dx 'ed. J'ai une AsyncTask avec un très long mehtod doInBackground. Pour une raison quelconque, cette méthode avec plus de 145 lignes a commencé à se rompre. C'est arrivé sur une application 2.3. Lorsque je viens d'encapsuler certaines parties dans des méthodes, cela a bien fonctionné.
Donc pour ceux qui n'ont pas pu trouver la classe qui n'était pas correctement dx , essayez de réduire la longueur de votre méthode.
la source
Pour moi, le problème a finalement été que j'utilisais une clause multi-catch quelque part dans la classe qui est une fonctionnalité Java 7 (et API 19+). Donc, il planterait
VerifyError
sur tous les appareils pré-19.la source
Pour moi, c'était en corrélation entre compileSdkVersion et buildToolsVersion. J'ai eu:
Je l'ai changé en:
la source
Pour moi, c'est le problème de compileSdkVersion. Lorsque j'ai utilisé le niveau API 21 dans une application Android spécifique ( https://github.com/android10/Android-AOPExample ):
l'erreur java.lang.verifyerror s'est produite. J'ai donc changé la version compileSdkVersion en 19
Cela a bien fonctionné. Je pense que cela pourrait être le problème de SDK buildTools, et cela semble correct lorsque le niveau d'API <21.
la source