0

因为我在许多情况下阅读了 java.lang.VerifyError 提示引用不依赖于 Android SDK 的不兼容 jar 文件。

我的问题是,是否有办法检查,特别是在导入的 jar 文件中调用的方法不兼容。是否可以列出冲突?

像这样我想检查是否要花很多精力使我现成的java程序与android兼容?

到目前为止,我只得到一个 VerifyError 和哪个文件导致它。但由于它是一个引用其他内容并包含一些代码的文件,我想知道究竟在哪些位置存在错误。

编辑

在这里您可以看到 LogCat 的日志。

09-21 11:10:03.080: W/dalvikvm(1988): VFY: unable to resolve exception class 427 (L/codec/ContentAccessException;)
09-21 11:10:03.080: W/dalvikvm(1988): VFY: unable to find exception handler at addr 0x16
09-21 11:10:03.080: W/dalvikvm(1988): VFY:  rejected Lsmb/LPP_SM;.start ()[Ljava/lang/String;
09-21 11:10:03.080: W/dalvikvm(1988): VFY:  rejecting opcode 0x0d at 0x0016
09-21 11:10:03.080: W/dalvikvm(1988): VFY:  rejected Lsmb/LPP_SM;.start ()[Ljava/lang/String;
09-21 11:10:03.080: W/dalvikvm(1988): Verifier rejected class Lsmb/LPP_SM;
09-21 11:10:03.080: D/AndroidRuntime(1988): Shutting down VM
09-21 11:10:03.080: W/dalvikvm(1988): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
09-21 11:10:03.110: E/AndroidRuntime(1988): FATAL EXCEPTION: main
09-21 11:10:03.110: E/AndroidRuntime(1988): java.lang.VerifyError: smb/LPP_SM
09-21 11:10:03.110: E/AndroidRuntime(1988):     at com.example.androidtest.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:109)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.Activity.performCreate(Activity.java:5008)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.os.Looper.loop(Looper.java:137)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at android.app.ActivityThread.main(ActivityThread.java:4745)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at java.lang.reflect.Method.invokeNative(Native Method)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at java.lang.reflect.Method.invoke(Method.java:511)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-21 11:10:03.110: E/AndroidRuntime(1988):     at dalvik.system.NativeStart.main(Native Method)

我已经要求列出有问题的类或函数调用。在这里,我相信我只能看到,ContentAccessException 是唯一与 Android 不兼容的问题。

至少,如果我在例如 LPP_SM 中评论该部分,错误就会消失。但是这个异常来自我用过的库之一,我无法更改。

会不会有更多的冲突?

4

2 回答 2

0

您是处于调试模式还是使用 proguard 进行发布?java.lang.VerifyError 是由于不同的编译器版本,如果您有任何使用 android 类(如 View)的外部 jar 并且您的目标 sdk 与用于生成 jar 的不同。您将在日志中找到错误的类。你能提供完整的错误吗?如果您正在使用 proguard,您可以使用 -dontpreverify -dontoptimizeoption 来阻止预验证。

于 2012-09-21T11:09:03.103 回答
0

您应该能够通过仔细阅读“adb logcat”的输出来跟踪问题。您应该能够看到找不到的类以及引用错误的类。在异常之前搜索 WARN/dalvikvm。

关于这个线程还有更多信息:Android java.lang.VerifyError?

于 2012-09-21T11:21:24.170 回答