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)
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With