Android 拒绝类,因为它未能通过编译时验证
我的一个应用程序在启动时突然失败,并显示以下错误消息: java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它失败了 编译时验证(声明 “com.sample.BufferManagerImpl”出现在 /data/app/com.sample.myapp-1/base.apk)Android 拒绝类,因为它未能通过编译时验证,android,synchronized-block,Android,Synchronized Block,我的一个应用程序在启动时突然失败,并显示以下错误消息: java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它失败了 编译时验证(声明 “com.sample.BufferManagerImpl”出现在 /data/app/com.sample.myapp-1/base.apk) 它仅在使用ART虚拟机的设备上出现故障,而在Dalvik上则不出现故障。该问题是由于在try catch块中存在synchronized块造成的,例如: t
它仅在使用ART虚拟机的设备上出现故障,而在Dalvik上则不出现故障。该问题是由于在
try catch
块中存在synchronized
块造成的,例如:
try {
synchronized (mLock) {
updateState();
}
} catch (IllegalStateException e) {
}
显然这不是一个好的做法,但只要我像这样改变它,它就会起作用:
synchronized(mLock) {
try {
updateState();
} catch (IllegalStateException e) {
}
}
我在使用安卓5时遇到了这个问题。我的应用程序在4或更低版本上运行正常,但在安卓5设备上我崩溃了 我用多个
线程
破坏了我的代码,并修复了它。
如果您的代码想要更改用户界面,请使用处理程序
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
。
.
.
.
.在android studio 2.1中,即时运行会导致此问题,请在关闭即时运行功能后运行 文件->首选项>生成执行->部署->即时运行 禁用第一个复选框:
启用即时运行到热插拔…如果您是使用Jack进行构建,请确保已从build.gradle关闭该功能
defaultConfig {
...
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled false
}
}
由于在Android InstrumentationTest中使用Mockito,也可能发生此错误。如果模拟对象上出现错误,则必须将以下行添加到渐变文件:
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。AOSP问题跟踪器上可能存在的相关问题:这会破坏lambdas。