51

デバイスにリリース APK をインストールすると、このエラーが発生し5.xます。4.x同じコードを Android Studio からプッシュしたり、デバイスで実行したりすると、エラーは発生しません。

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)

ツールバーとカスタム NavigationDrawer をクラスに挿入します。

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

31 行目:

ButterKnife.inject(this);

を使用する場合、Butterknife codegen と異なる点はありgradle assembleReleaseますか? ProGuard はまったく使用していません。

他の 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

ログキャット

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)
4

11 に答える 11

82

フォルダーをクリーンアップするとbuild、問題が解決しました。ART に問題があった理由は不明ですが、Dalvik には問題がありませんでした。

gradlecleanタスクを実行しても、buildフォルダーが完全にクリアされませんでした。手動で行う必要がありましたcleanが、一部の人にはうまくいくかもしれません。

于 2015-01-19T20:08:38.407 に答える
18

私の場合、原因は少し異なりました。

どうやら、synchronizedステートメントをtry/catchブロック内に配置すると、ここ SOおよび公式のバグトラッカーVerifyErrorで報告されているように、 .

于 2015-02-06T14:38:50.773 に答える
2

クラス A の定義を変更した場合に発生する特定のシナリオで主に検証エラーがスローされますが、クラス B はクラス A の古いバージョンを使用してコンパイルされました。そのため、プロジェクトをクリアし、すべてのクラスを同じもので一緒に再構築すると解決されます。 Java のバージョン。

次のリンクは、検証エラーが発生する可能性のあるシナリオの一部を示しています。 java.lang.VerifyError – VerifyError の解決方法

于 2020-01-24T12:04:15.887 に答える
0

私の場合、原因はプロガードです。私のアプリは、Android 5.0であるsumsung note3でシャットダウンします。
android-async-http-1.4.9.jar をインポートしました。プロガードは次のとおりです。

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

それは十分ではありません。追加した:

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

バグがなくなりました。

したがって、このバグに遭遇した場合、根深い理由は明らかではないかもしれませんが、proguard ファイルに注意する必要があります。

于 2016-05-23T07:48:51.600 に答える
0

これは、Debug Build でもこの問題に直面している人を助けることができるかもしれません。

私も同じエラーに直面していました。Google API コンソール プロジェクトを構成できませんでした。したがって、これに従ってGoogle API コンソール プロジェクトを構成 し、プロンプトが表示されたらアプリのパッケージ名を指定します。また、署名証明書のSHA-1 ハッシュを提供する必要があります。詳細については、クライアントの認証を参照してください。

于 2019-05-09T20:36:58.870 に答える