我的一个应用程序在启动时突然失败,并显示以下错误消息:
java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl因为失败了 编译时验证(声明 出现'com.sample.BufferManagerImpl' /data/app/com.sample.myapp-1/base.apk)
它仅在使用ART虚拟机的设备上失败,但在Dalvik上没有失败
答案 0 :(得分:8)
问题是由于synchronized
块中有try-catch
块,例如:
try {
synchronized (mLock) {
updateState();
}
} catch (IllegalStateException e) {
}
显然这不是一个好习惯,但是一旦我改变它就会起作用:
synchronized(mLock) {
try {
updateState();
} catch (IllegalStateException e) {
}
}
答案 1 :(得分:3)
在android studio 2.1中,即时运行会导致此问题,只需在关闭即时运行功能后运行。
档案 - >偏好>构建执行 - >部署 - >即时运行
禁用第一个复选框: 启用即时运行热插拔.....
答案 2 :(得分:1)
如果您使用Jack构建,请确保它已从build.gradle
关闭defaultConfig {
...
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled false
}
}
答案 3 :(得分: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。
答案 4 :(得分:0)
我有 android 5 这个问题。我的应用程序在4或以下正确,但在Android 5设备上我崩溃了。
我用多个Threads
打破了我的代码并修复了它。
如果您的代码想要更改用户界面,请使用处理程序。
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
。 。 。 。