9

我的一个应用程序在启动时突然失败,并显示以下错误消息:

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 文件中:

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 回答
1

如果您正在使用 Jack 构建,请确保它已从 build.gradle 关闭

defaultConfig {
    ...
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    jackOptions {
        enabled false
    }
}
于 2016-09-09T10:12:14.353 回答
0

我对android 5有这个问题。我的应用程序在 4 或更低版本上运行正确,但在 android 5 设备上我崩溃了。

我多次破坏了我的代码,Threads它已修复。如果您的代码想要更改UI使用处理程序

 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 回答