Cody Blog

Software development

Java verify Error(unchecked exception)

前幾天,在 Google Play Console 收到了二個從使用者回報的 Crash Log,分別是從 Android 5.1 和 4.4 版本所回報的,Android 5.1 的 Traceback:

Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/adobe/xmp/XMPMetaFactory;

Android 4.4 的 Traceback

Caused by: java.lang.VerifyError: com/drew/metadata/xmp/XmpReader 

我花了一些時間把 tracecode 希望可以找到是那邊發生的,但是一直找不到。最後發現,這邊丟出來的 Error 是 unchecked exceptions 也就是預期是程式有 Bug,所以不會由 Try-catch 來 handle 這種 error。這種 Error 需要丟出來讓外界來把這個 bug 修掉。這個問題是因為我們有用到一個 thirdparty 的 Library 叫 metadata-extractor 其中包含了兩個 jar 檔: metadata-extractor-x.x.x.jarxmpcore-x.x.x.jar。我們因故漏放了xmpcore-x.x.x.jar,導致在處理 xmp 相關的圖檔出現這個錯誤。最後緊急把xmpcore-x.x.x.jar加回來解決了這個問題。

Unchecked exception 的例子

包含 RuntimeException, Error, 跟他們的子類別,例如: NullPointerException.

Here's the bottom line guideline: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.


Java Android

Related Posts