【问题标题】:java.lang.VerifyError in Android application [duplicate]Android应用程序中的java.lang.VerifyError [重复]
【发布时间】:2011-10-03 21:03:28
【问题描述】:

您好,我每次尝试打开活动时都会收到此错误

java.lang.VerifyError: com.karriapps.smartsiddur.Saharit
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1429)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)

有人可以指导我找到解决方案或检查问题出在哪里的方法吗 谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    VerifyError 表示您编译的字节码指的是 Android 无法找到的内容。在这种情况下,您似乎引用了 Android 无法找到的 com.karriapps.smartsiddur.Saharit 类。

    【讨论】:

    • 但它在我的设备(Android 2.3.5)上运行良好,它只在 Android 2.1 和 2.2 中显示该消息
    • @oreizion:那么您可能指的是来自com.karriapps.smartsiddur.Saharit 的Android 中的某些类或方法,这些类或方法在API 级别7 或8 上不存在,而仅在API 级别9+ 上。您可能会暂时将构建目标降低到 API 级别 7,看看这是否会告诉您哪里出错了。
    【解决方案2】:

    正如 CommonsWare 所提到的,VerifyError 意味着您正在尝试引用 Dalvik 无法加载的类。

    可能缺少这个类。

    也有可能您正在尝试将框架方法用于高于设备上现有 API 级别的 API,因此该类被视为无效而被拒绝。

    尝试将编译器的构建级别设置为 API 级别 7,它对应于 Android 2.1。 (不要忘记将 AndroidManfest.xml 的 targetSdkVersion 也设置为“7”。)这将导致任何不存在的框架调用引发编译器错误。

    您可能还想查看收到的堆栈跟踪上方/下方的行,看看是否有来自验证者的任何其他信息表明验证失败的原因。

    【讨论】:

    • 好吧,我试过我将编译器设置为 7,它没有给我编译错误
    • +1 这就是我受伤的原因;将 Build Target 更改为 API 15 后没有意识到我必须 在 AndroidManifest.xml 中设置它
    • 帮了我谢谢!我正在调用 api 级别 10 不支持的异常,因此更改目标很好地显示了 dalvik 错误。非常感谢!
    【解决方案3】:

    我发现了一个有趣的案例,它在运行时有证据。我用:

    <uses-sdk
       android:minSdkVersion="9"
       android:targetSdkVersion="18" />
    

    因此,Android 4 的一些新功能并未像这样在 Android 2.3 中实现:

    imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    

    好的,我可以管理它,所以运行时不会执行它,只是:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
       setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    

    这很好,但是异常处理呢?

    } catch (NetworkOnMainThreadException nomte) {
       // log this exception
    } catch (SocketTimeoutException socketTimeoutException) {
       // log this exception
    }
    

    NetworkOnMainThreadException 未在 Android 2.3 中实现,因此当类加载时会出现异常java.lang.VerifyError

    【讨论】:

      【解决方案4】:

      我今天遇到了这个问题,正如 CommonsWare 所提到的,问题是我编译的字节码指的是不再存在的东西。但是你应该怎么做呢?

      因为我使用的是 Eclipse SDK,所以对我来说简单的解决方案是执行 Eclipse 的项目 → 清理以删除我的项目中导致问题的预编译字节码。 Project clean put 只是让 eclipse 在 clean 之后对我的项目执行全新的重建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        相关资源
        最近更新 更多