2014-12-24 35 views
1

有時候,我可以找到崩潰報告服務日誌像下面的VerifyError上GoogleAuthUtil類

Caused by: java.lang.VerifyError: com/google/android/gms/auth/GoogleAuthUtil 
    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(ProGuard:255) 
    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(ProGuard:279) 
    at com.google.api.client.http.HttpRequest.execute(ProGuard:859) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(ProGuard:410) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(ProGuard:343) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(ProGuard:460) 

從技術文檔

當VM注意到試圖加載類 它確實拋出該異常未通過班級驗證階段。

這種情況很少發生,主要發生在根植設備上。這個類被封裝在應用程序中,所以它很奇怪,它不適用於某些設備。

我認爲這是因爲有人試圖修改應用程序(例如通過odex或dalvik-cache修補)。目前我讓應用程序崩潰,因爲它是LinkageError,不應該在我看來處理。我是對的,還是可能有這個問題的其他原因?

回答

1

由於VerifyError在JVM加載類的過程中被拋出,如果遇到不正確的字節碼,很可能是任何錯誤都是由檢測引起的。 Android上的錯誤意味着您的字節碼包含對Dalvik無法加載的com/google/android/gms/auth/GoogleAuthUtil的引用。如果GoogleAuthUtil中使用的方法需要比設備上的API級別更高的API級別,則也可能會發生這種情況。

除此之外,很難從客戶的設備中推斷出更多的事實。正如你所建議的,可能有人試圖修改應用程序的字節碼,或者(如果根源設備可能更有可能)導致GoogleAuthUtil無法正確執行的API。

考慮到a)在大多數情況下不能推導出根本原因,b)即使不做太多的工作,讓應用程序崩潰也是完美無缺的。

相關問題