前幾天,在 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.jar
和 xmpcore-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.