有时我可以在崩溃报告服务日志中找到如下所示

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,因此我认为不应对其进行处理。我是对的,还是可能有其他原因导致此问题?

最佳答案

如果遇到错误的字节码,JVM会在类加载期间抛出VerifyError,因此任何错误很可能是由检测引起的。您在Android上的错误意味着您的字节码包含对Dalvik无法加载的com/google/android/gms/auth/GoogleAuthUtil的引用。如果GoogleAuthUtil中使用的方法要求的API级别高于设备上的API级别,则也可能发生这种情况。

除此之外,很难从客户的设备中推断出更多的事实。如您所建议,这可能是某人试图修改应用程序的字节码,或者(可能是有根设备的情况下)修改了API,导致GoogleAuthUtil无法正确执行。

考虑到a)在大多数情况下您无法推断出根本原因,b)即使不做太多事情,让应用程序崩溃也完全可以。

关于java - GoogleAuthUtil类上的VerifyError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27638043/

10-09 02:51