Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.VerifyError: Verifier rejected class on Lollipop when using release APK

I get this error when I install my release APK on a 5.x device. The error does not occur when I push the same code from Android Studio, or if I run it on a 4.x device.

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) 

I inject my Toolbar and a custom NavigationDrawer in the class.

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

Line 31:

ButterKnife.inject(this); 

Is there something that would be different with the Butterknife codegen when using gradle assembleRelease? I am not using ProGuard at all.

Here are my other Android build settings:

# 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) 
like image 706
Austyn Mahoney Avatar asked Jan 19 '15 19:01

Austyn Mahoney


2 Answers

Cleaning out the build folder resolved the problem. Not sure why ART had an issue but Dalvik did not.

Running a gradle clean task was not clearing out my build folder all the way. I had to do it manually, but clean may work for some people.

like image 110
Austyn Mahoney Avatar answered Oct 06 '22 23:10

Austyn Mahoney


In my case, the cause was slightly different.

Apparently, putting a synchronized statement inside a try/catch block causes the VerifyError, as reported here on SO and on the official bug tracker.

like image 34
Sebastiano Avatar answered Oct 06 '22 22:10

Sebastiano