5.x
デバイスにリリースAPKをインストールすると、このエラーが発生します。 Android Studioから同じコードをプッシュした場合、または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)
クラスにツールバーとカスタムNavigationDrawerを挿入します。
@InjectView(R.id.toolbar) Toolbar mToolbar;
@InjectView(R.id.nav_drawer) MyNavigationDrawer mNavigationDrawer;
31行目:
ButterKnife.inject(this);
gradle assembleRelease
を使用する場合、Butterknife codegenと異なるものはありますか? 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
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)
build
フォルダーを削除することで問題は解決しました。 ARTに問題が発生した理由はわかりませんが、Dalvikには問題がありませんでした。
Gradle clean
タスクを実行すると、build
フォルダーが完全に消去されませんでした。私は手動でそれをしなければなりませんでしたが、clean
は一部の人々のために働くかもしれません。
私の場合、エラーメッセージが「悪い」と言った方法には、いくつかの未知の障害がありました。 Kotlin lambdaから通常のループに変更することで問題が解決しました。
前(エラーあり):
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()) }
後:
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
}
私の場合、「ビルド、実行、展開」の設定から「インスタントラン」オプションを無効にしました。残念ながらAndroidスタジオ機能 "Instant Run"はまだ安定していない...
そうするために:
私のアプリはほとんどのプラットフォームで動作していましたが、すぐにクラッシュしましたAndroid5.1。Googleの情報を読んで新しいD8 dexコンパイラが疑われるようになりました。プロジェクトのキャッシュのクリーン/無効化では修正されませんでした。同期ブロックがいくつかありましたが、それらを削除しても修正されませんでした。インスタントランをオフにしても修正されませんでした。それを修正しませんでした。
D8を無効にする方法は次のとおりです。
-プロジェクトのルートにgradle.propertiesというファイルが存在しない場合は作成します
-次の行を追加:Android.enableD8 = false
非推奨の警告が表示されます。 Googleが廃止されたDXを完全に削除する前にD8を実際に修正することを願っています。私のコードの何がそれを引き起こすのか分かりません。 Android Studio 3.2.1とgradleバージョン4.6を使用しています。編集:このバグを報告し、Google開発者は積極的に調査しています
私の場合、原因はプロガードです。 sumsung note3でのアプリのシャットダウンはAndroid 5.0。
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.**{*;}
バグがなくなった。
したがって、このバグが発生した場合、根深い理由はおそらく明らかではないかもしれませんが、プロガードファイルに注意する必要があります。
GoogleTagManager
によってスローされた同じ問題がありました。
Java.lang.VerifyError:Verifierはクラスcom.google.Android.gms.tagmanager.TagManagerを拒否しました:com.google.Android.gms.common.api.PendingResult com.google.Android.gms.tagmanager.TagManager.loadContainerDefaultOnly(Java。 lang.String、int)の検証に失敗しました:com.google.Android.gms.common.api.PendingResult com.google.Android.gms.tagmanager.TagManager.loadContainerDefaultOnly(Java.lang.String、int):[0x11] return '参照:com.google.Android.gms.tagmanager.zzp'、ただし宣言から期待される '参照:com.google.Android.gms.common.api.PendingResult'
マージ後に発生しました。同僚がライブラリを10.0.1
から10.2.1
に更新しました。クリーンビルドが機能しませんでした。
時間の制約のため、私は古いバージョンにロールバックしましたが、うまくいきました。
シンプルな(3)ステップ私のために働いた:
1-= Android studio build-> clean projectのトップメニューから
2- Android studio build-> make projectのトップメニューから
- Android studio build-> rebuild projectのトップメニューから
すべてのセットアップ..
これは、Debug Buildでこの問題に直面している人にも役立つかもしれません。
私も同じエラーに直面していました。GoogleAPI Consoleプロジェクトを設定するのを逃しました。 this の後にGoogle APIコンソールプロジェクトを構成し、プロンプトが表示されたらアプリのパッケージ名を指定します。また、署名証明書のSHA-1ハッシュも提供する必要があります。詳細については、クライアントの認証を参照してください。