【问题标题】:External JAR Android - List Incompatibilities外部 JAR Android - 列出不兼容性
【发布时间】:2012-09-21 10:42:56
【问题描述】:

我在许多情况下阅读了 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 是唯一的问题 与安卓不兼容。

至少,如果我在例如LPP_SM 错误将消失。 但是这个异常来自我用过的库之一,我无法更改。

会不会有更多的冲突?

【问题讨论】:

    标签: android jar compatibility verifyerror


    【解决方案1】:

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

    关于此线程的更多信息:Android java.lang.VerifyError?

    【讨论】:

    • 所以我的问题是我使用了java文件,这些文件不是用android sdk构建的。 Java只兼容android,只要使用android sdk中的库就可以了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多