获取“由:java.lang.VerifyError引起的:”
我创build了一个android应用程序,在另一个android应用程序中用作库。 我在Android应用程序中使用了一些第三方的jar子作为库。 当我在我的android应用程序中链接这个库并运行它时,当它试图访问库中存在的类时,出现validation错误。 我可否知道阻挡在这里的问题是什么? 任何帮助非常感谢..
我在这里附上日志,Parser1是库中的类。 当我尝试为Parser1类创build对象时,出现错误。
06-06 10:05:43.742: WARN/dalvikvm(224): VFY: unable to resolve static method 3084: Lorg/codehaus/jackson/JsonToken;.values ()[Lorg/codehaus/jackson/JsonToken; 06-06 10:05:43.742: DEBUG/dalvikvm(224): VFY: replacing opcode 0x71 at 0x0005 06-06 10:05:43.742: DEBUG/dalvikvm(224): Making a copy of Lcom/support/utils/Parser1;.$SWITCH_TABLE$org$codehaus$jackson$JsonToken code (522 bytes) 06-06 10:05:43.752: WARN/dalvikvm(224): VFY: unable to find class referenced in signature (Lorg/codehaus/jackson/JsonParser;) 06-06 10:05:43.752: INFO/dalvikvm(224): Could not find method org.codehaus.jackson.JsonParser.getCurrentToken, referenced from method com.support.utils.Parser1.addSectionContentData 06-06 10:05:43.761: WARN/dalvikvm(224): VFY: unable to resolve virtual method 3077: Lorg/codehaus/jackson/JsonParser;.getCurrentToken ()Lorg/codehaus/jackson/JsonToken; 06-06 10:05:43.761: DEBUG/dalvikvm(224): VFY: replacing opcode 0x74 at 0x0002 06-06 10:05:43.761: DEBUG/dalvikvm(224): Making a copy of Lcom/support/utils/Parser1;.addSectionContentData code (2421 bytes) 06-06 10:05:43.761: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;) 06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;) 06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;) 06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to find exception handler at addr 0x19b 06-06 10:05:43.771: WARN/dalvikvm(224): VFY: rejected Lcom/support/utils/Parser1;.addSectionContentData (Lorg/codehaus/jackson/JsonParser;Ljava/util/List;Lcom/support/ModelClasses/SectionContent;Lcom/support/ModelClasses/FeatureInfo;ZZLjava/lang/String;)Ljava/util/List; 06-06 10:05:43.781: WARN/dalvikvm(224): VFY: rejecting opcode 0x0d at 0x019b 06-06 10:05:43.781: WARN/dalvikvm(224): VFY: rejected Lcom/support/utils/Parser1;.addSectionContentData (Lorg/codehaus/jackson/JsonParser;Ljava/util/List;Lcom/support/ModelClasses/SectionContent;Lcom/support/ModelClasses/FeatureInfo;ZZLjava/lang/String;)Ljava/util/List; 06-06 10:05:43.781: WARN/dalvikvm(224): Verifier rejected class Lcom/support/utils/Parser1; 06-06 10:05:43.793: WARN/dalvikvm(224): threadid=15: thread exiting with uncaught exception (group=0x4001b188) 06-06 10:05:43.793: ERROR/AndroidRuntime(224): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception 06-06 10:05:43.812: ERROR/AndroidRuntime(224): java.lang.RuntimeException: An error occured while executing doInBackground() 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at android.os.AsyncTask$3.done(AsyncTask.java:200) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.lang.Thread.run(Thread.java:1096) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): Caused by: java.lang.VerifyError: com.support.utils.Parser1 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at com.Sample.checkforversioning(Sample.java:652) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at com.Sample$checkVersionThread.doInBackground(Sample.java:682) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at com.Sample$checkVersionThread.doInBackground(Sample.java:1) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at android.os.AsyncTask$2.call(AsyncTask.java:185) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 06-06 10:05:43.812: ERROR/AndroidRuntime(224): ... 4 more 06-06 10:05:43.832: INFO/Process(52): Sending signal. PID: 224 SIG: 3
谢谢,Senthil.M
在Eclipse
,转到Project properties -> Java Build Path
。 selectOrder and Export
标签,并检查你的第三方jar子。
这可能是由jar中访问Java中不在Android SDK中的东西引起的。 查看LogCat中的exception,它可能会告诉你它缺less的东西。 如果您有第三方jar的源代码,请尝试将它们直接包含到您的项目中; 这将有助于确定问题。
您还需要通过sdk附带的“dx”工具运行您的jar文件。
如果你使用的是ant,那么你应该把所有的外部jar添加到下面的目录“libs”中,并且在一个新的文件中添加下面一行:ant.properties:jar.libs.dir = libs
如果您在使用ProGuard构build应用程序的发行版本后收到VerifyError
,则可能与某些优化问题有关。 请参阅文档 ,这基本上build议使用-dontoptimize
禁用优化。
从/ libs文件夹中删除所有jar文件,然后再次添加它们,然后清理项目并为我修复。
同样的错误发生在我身上,因为我试图在v.8 API设备上捕获exceptionSQLDataException,因为相应的类不包含在v.8 API中(该错误在第14版设备中没有发生,包括在内)。 实际上,SQLDataException.class不仅存在于v.8 API的android.jar中,而且包含在v.14 API中。 所以我用exceptionSQLException(其SQLDataException是一个子类)replaceexceptionSQLDataException,我的应用程序现在在这两个API的设备上运行良好。