2011-06-06 58 views
5

我創建了一個android應用程序,用作另一個android應用程序中的庫。我在android應用程序中使用了一些第三方jar,它充當一個庫。當我在我的android應用程序中鏈接這個庫並運行它時,當它試圖訪問庫中存在的類時,我收到驗證錯誤。我可否知道阻擋我的是什麼問題?任何幫助極大地讚賞..獲取「引起:java.lang.VerifyError:」

我附加日誌在這裏和Parser1是庫內的類。當我嘗試爲Parser1類創建對象時,出現錯誤。

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

+0

你可以更明確的錯誤嗎?你是否先在項目中拷貝你的jar,然後將它添加到Build Path中,或者你只在項目之外的Build Path中引用它? – sfat 2011-06-06 04:52:47

+0

我在我的庫項目中創建了一個名爲lib的目錄,然後在庫中將其引用。而這個庫與原來的android應用程序鏈接。 – Senthil 2011-06-06 04:58:32

+0

好吧。你能否從LogCat複製完整的錯誤堆棧跟蹤來查看錯誤來自哪裏? – sfat 2011-06-06 05:02:12

回答

2

,可以通過在罐子訪問Java中的東西,這不是在Android SDK的東西引起的。查看LogCat中的異常,它可能會告訴你它缺少的內容。如果您有第三方jar的源代碼,請嘗試將它們直接包含到您的項目中;這將有助於確定問題。

您還需要通過sdk附帶的「dx」工具運行您的jar文件。

+0

我沒有第三方jar的來源..你能解釋如何通過dx工具運行我的jar。我沒有很多知識abt它..我嘗試了鏈接http://androidorigin.blogspot.com/2011/02/dex-format-to-jar-format.html中給出的方法。即使那時得到同樣的問題。感謝您的回覆.. – Senthil 2011-06-06 05:03:06

+0

它無法找到「com.support.utils.Parser1」類。那是應該在jar文件中的東西嗎?如果您使用的是Eclipse,請確保您遵循了[包含第三方jar的說明](http://developer.android.com/resources/faq/commontasks。HTML#addexternallibrary)。另外,如果您使用的是Eclipse,則無需運行dx工具;它會自動完成。 – 2011-06-06 05:23:11

+0

嗨frnd,我遵循開發人員鏈接中給出的1到3個步驟。有一個替代選項,如「添加庫」。請問你是否提過那件事?如果我點擊添加庫選項,我無法添加第三方罐子.. – Senthil 2011-06-06 05:36:42

11

Eclipse中,轉到Project properties -> Java Build Path。選擇Order and Export標籤並檢查您的第三方罐子。

+2

這將如何適用於Android Studio?我相信我有同樣的錯誤。 – tccpg288 2016-04-19 17:05:01

0

如果使用的是螞蟻,那麼您應該將所有外部罐子添加到以下目錄「庫」以及在新文件中添加以下行:ant.properties: jar.libs.dir =庫

0

如果您在使用ProGuard構建應用的發佈版本後得到VerifyError,則可能與某些優化問題有關。 Refer to the documentation,基本上建議使用-dontoptimize禁用優化。

0

從/ libs文件夾中刪除所有jar文件,然後再次添加它們,然後清理項目併爲其修復。

0

我發生了同樣的錯誤,因爲我試圖捕獲v.8 API設備上的異常SQLDataException,因爲相應的類未包含在v.8 API中(該錯誤未在v.14設備中發生,包括那個類的地方)。 事實上,SQLDataException.class不僅存在於v.8 API的android.jar中,而且包含在v.14 API中。 因此,我將異常SQLDataException替換爲異常SQLException(其SQLDataException是一個子類),我的應用程序現在可以在兩個API的設備上正常運行。