9

アプリケーションの 1 つが起動時に突然失敗し、次のエラー メッセージが表示されます。

java.lang.VerifyError: コンパイル時の検証に失敗したため、クラス com.sample.BufferManagerImpl を拒否しています (「com.sample.BufferManagerImpl」の宣言が /data/app/com.sample.myapp-1/base.apk に表示されます)

ART 仮想マシンを使用するデバイスでのみ失敗しますが、Dalvik では失敗しません

4

5 に答える 5

9

この問題は、synchronizedブロック内にtry-catchブロックがあることが原因です。たとえば、次のようになります。

try {
    synchronized (mLock) {
        updateState();
    }
} catch (IllegalStateException e) {
}

どうやらこれは良い習慣ではありませんが、次のように変更するとすぐに機能します:

synchronized(mLock) {
    try {
        updateState();
    } catch (IllegalStateException e) {
    }
}
于 2015-05-26T09:52:01.490 に答える
3

Android Studio 2.1 では、インスタント実行がこの問題を引き起こします。インスタント実行機能を閉じた後に実行するだけです。

ファイル -> 設定 > ビルドの実行 -> 配置 -> インスタント実行

最初のチェックボックスを無効にします: Enable Instant Run to hot swap.....

于 2016-05-11T10:18:32.440 に答える
1

このエラーは、Android InstrumentationTest 内での Mockito の使用が原因で発生することもあります。オブジェクトのモックでエラーが表示される場合は、次の行を gradle-file に追加する必要があります。

androidTestCompile "com.crittercism.dexmaker:dexmaker:1.4"
androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:1.4"
androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.4"

これは、Mockito 1.10.15 および 1.10.19 で機能します。

于 2016-11-04T19:03:52.757 に答える
0

私はアンドロイド5でこの問題を抱えていました。私のアプリは 4 以下では正しく動作しましたが、Android 5 デバイスではクラッシュしました。

コードを複数で壊してThreads修正しました。コードでUIを変更する場合は、 handlerを使用します。

 Thread Thread = new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            handler.post(new Runnable() {

                @Override
                public void run() {
                    use this if your codes will change the Ui

. . . . .

于 2015-10-03T04:40:31.780 に答える