Java.lang.VerifyError: Verificateur classe rejetée sur Lollipop lors de l'utilisation de release APK

je reçois cette erreur lorsque j'installe ma version APK sur un périphérique 5.x . L'erreur ne se produit pas lorsque je pousse le même code depuis Android Studio, ou si je l'exécute sur un périphérique 4.x .

java.lang.VerifyError: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) (declaration of 'com.myapp.android.ui.activity.MainActivity$$ViewInjector' appears in /data/app/com.myapp.android-2/base.apk)
       at java.lang.Class.classForName(Class.java)
       at java.lang.Class.forName(Class.java:308)
       at java.lang.Class.forName(Class.java:272)
       at butterknife.ButterKnife.findInjectorForClass(ButterKnife.java:298)
       at butterknife.ButterKnife.inject(ButterKnife.java:271)
       at butterknife.ButterKnife.inject(ButterKnife.java:184)
       at com.myapp.android.ui.activity.MyDrawerActivity.onCreate(MyDrawerActivity.java:31)

j'injecte ma barre d'outils et un Drawer de navigation personnalisé dans la classe.

@InjectView(R.id.toolbar) Toolbar mToolbar;
@InjectView(R.id.nav_drawer) MyNavigationDrawer mNavigationDrawer;

ligne 31:

ButterKnife.inject(this);

Est-il quelque chose qui serait différent avec la Butterknife codegen lors de l'utilisation de gradle assembleRelease ? Je n'utilise pas du tout ProGuard.

Voici mes autres paramètres de construction Android:

# Android SDK settings
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1.2

Logcat

I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
29
demandé sur Austyn Mahoney 2015-01-19 22:12:50

7 réponses

le nettoyage du dossier build a résolu le problème. Je ne sais pas pourquoi L'ART avait un problème, mais Dalvik ne l'a pas fait.

exécuter une tâche gradle clean n'éliminait pas complètement mon dossier build . J'ai eu à le faire manuellement, mais clean peut fonctionner pour certaines personnes.

64
répondu Austyn Mahoney 2015-01-19 20:08:38

Dans mon cas, la cause était légèrement différente.

apparemment, mettre une déclaration synchronized à l'intérieur d'un bloc try/catch provoque le VerifyError , comme rapporté ici sur SO et sur le bug tracker officiel .

10
répondu Sebastiano 2017-05-23 11:47:23

dans mon cas, j'ai simplement désactivé l'option" exécution instantanée "de mes paramètres" construction, exécution, déploiement". Malheureusement, la fonctionnalité Android studio "Instant Run" est encore loin d'être stable...

À le faire:

  1. allez dans "Fichier" > "Paramètres" > "Construire, l'Exécution, le Déploiement" > "Instant Exécuter"
  2. décocher la case" Activer L'exécution instantanée..."et cliquez sur" OK "bouton
2
répondu ahmed_khan_89 2017-03-07 13:30:51

dans mon cas, la méthode indiquée par le message d'erreur était "mauvaise" et présentait des défauts inconnus. Passer d'un lambda Kotlin à une boucle régulière a résolu mon problème.

Avant (Avec Erreur):

fun validZipCode(zipcode: String): Boolean {
    val validRegexes = arrayOf(
            "0[0-9]{1}[0-9]{2}", 
            "1[0-2]{1}[0-9]{2}", 
            "1[3-4]{1}[0-9]{2}", 
            "19[0-9]{2}", 
            "2[0-1]{1}[0-9]{2}" 
    )
return validRegexes.any { zipcode.matches(it.toRegex()) }

après:

fun validZipCode(zipcode: String): Boolean {

    val validRegexes = arrayOf(
            "0[0-9]{1}[0-9]{2}", 
            "1[0-2]{1}[0-9]{2}", 
            "1[3-4]{1}[0-9]{2}",
            "19[0-9]{2}", 
            "2[0-1]{1}[0-9]{2}"
    )

    for (regex in validRegexes) {
        if (zipcode.matches(regex.toRegex())) {
            return true
        }
    }

    return false
}
2
répondu Marius Kohmann 2018-02-16 12:52:18

dans mon cas, la cause est proguard. Mon arrêt d'application sur sumsung note3 whick est android 5.0.

J'ai importé l'android-async-http-1.4.9.jar, le proguard est:

-dontwarn com.loopj.android.http.**
-keep class com.loopj.android.http.**{*;}

ce n'est pas assez. J'ai ajouté:

-dontwarn cz.msebera.**
-keep class cz.msebera.**{*;}

le bug est parti.

donc si vous entrez dans ce bug, la raison profonde peut-être pas évidente, il faut noter le fichier proguard.

1
répondu user1452641 2017-07-31 13:02:35

j'ai eu le même problème jetés par 151900920" .

de java.lang.VerifyError: Verificateur rejeté classe com.Google.Android.gms.tagmanager.TagManager: com.Google.Android.gms.commun.API.PendingResult com.Google.Android.gms.tagmanager.TagManager.loadContainerDefaultOnly (java.lang.String, int) pas de vérifier: com.Google.Android.gms.commun.API.PendingResult com.Google.Android.gms.tagmanager.TagManager.loadContainerDefaultOnly (java.lang.String, int): [0x11] de retour de Référence: com.Google.Android.gms.tagmanager.zzp", mais attendue de la déclaration " référence: com.Google.Android.gms.commun.API.PendingResult '

c'est arrivé après la fusion. Mon collègue a mis à jour la bibliothèque de 10.0.1 à 10.2.1 . Nouvelle version ne fonctionne pas.

en raison de contraintes de temps, je me rétracte vers l'ancienne version, et ça a marché.

0
répondu Irshu 2017-02-27 09:48:48

Simple (3) étapes travaillé pour moi:

1 - depuis le menu du haut de android Studio build -- > clean project

2 - depuis le menu du haut de android Studio build -- > make project

3 - en haut du menu de construction de studio android -- > projet de reconstruction

tout est prêt..

0
répondu Ali Nawaz 2018-04-17 08:12:01