有时,我可以在崩溃报告服务日志中找到如下所示
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缓存修补程序)。目前,我让这个应用程序崩溃了,因为它是LinkageError,在我看来不应该被处理。我是对的,还是有其他原因造成这个问题?
发布于 2015-02-23 12:08:18
由于VerifyError是在JVM加载类时抛出的,如果遇到不正确的字节代码,那么任何错误都很可能是由插装引起的。您在Android上的错误意味着您的字节码包含了对com/google/android/gms/auth/GoogleAuthUtil的引用,而Dalvik无法加载该引用。如果GoogleAuthUtil中使用的方法需要比设备上的API级别更高的API,也可能发生这种情况。
除此之外,很难从客户的设备中推断出更多的事实。正如您所建议的,可能有人试图修改应用程序的字节码,或者(如果是根设备,则可能更有可能) API,从而导致GoogleAuthUtil无法正常执行。
考虑到这一点,在大多数情况下,您无法推断出根本原因;( b)即使不采取太多措施,让应用程序崩溃也是很好的,海事组织。
https://stackoverflow.com/questions/27638043
复制相似问题