我的一个应用程序在启动时突然失败,并显示以下错误消息:
java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它未能通过编译时验证(“com.sample.BufferManagerImpl”的声明出现在 /data/app/com.sample.myapp-1/base.apk 中)
它只在使用 ART 虚拟机的设备上失败,但在 Dalvik 上没有
我的一个应用程序在启动时突然失败,并显示以下错误消息:
java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它未能通过编译时验证(“com.sample.BufferManagerImpl”的声明出现在 /data/app/com.sample.myapp-1/base.apk 中)
它只在使用 ART 虚拟机的设备上失败,但在 Dalvik 上没有
问题是由于synchronized
块内有一个try-catch
块,例如:
try {
synchronized (mLock) {
updateState();
}
} catch (IllegalStateException e) {
}
显然这不是一个好习惯,但是一旦我像这样更改它,它就会起作用:
synchronized(mLock) {
try {
updateState();
} catch (IllegalStateException e) {
}
}
在android studio 2.1中,即时运行会导致这个问题,关闭即时运行功能后运行即可。
文件 -> 首选项 > 构建执行 -> 部署 -> 即时运行
禁用第一个复选框:Enable Instant Run to hot swap.....
由于在 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。
如果您正在使用 Jack 构建,请确保它已从 build.gradle 关闭
defaultConfig {
...
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled false
}
}
我对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
. . . . .