IllegalArgumentException:不支持的 ABI:Android5.0 上的 VMRuntime.getInstructionSet() 中为 null

IllegalArgumentException: Unsupported ABI: null in VMRuntime.getInstructionSet() on Android 5.0

在我们最近的更新后,在 Google Play Console 上看到这个崩溃,发生在 Android 5.0 上超过 99% 的情况。 我猜这与 WebView 有关,并看到了这个相关的 post: https://bugs.chromium.org/p/chromium/issues/detail?id=559720 然而,这似乎不像我们的情况,因为我们只是在最近的更新后才看到这个崩溃,而且几乎所有发生在 Android 5.0 上。 我们仍在使用 Facebook SDK 4.9.0,不知道它是否太旧了。 Stacktrace如下:

java.lang.Error: FATAL EXCEPTION [main]
Unity version     : 5.6.3f1
Device model      : positivo S455
Device fingerprint: Positivo/S455/S455:5.0.2/LRX22G/URBR2017051601:user/release-keys
Caused by
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:3136)
  at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3167)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2522)
  at android.app.ActivityThread.access0 (ActivityThread.java:162)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1412)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:189)
  at android.app.ActivityThread.main (ActivityThread.java:5529)
  at java.lang.reflect.Method.invoke (Native Method)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:951)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:746)
Caused by: java.lang.IllegalArgumentException: 
  at dalvik.system.VMRuntime.getInstructionSet (VMRuntime.java:324)
  at dalvik.system.VMRuntime.is64BitAbi (VMRuntime.java:337)
  at android.webkit.WebViewFactory.getWebViewNativeLibraryPaths (WebViewFactory.java:273)
  at android.webkit.WebViewFactory.loadNativeLibrary (WebViewFactory.java:384)
  at android.webkit.WebViewFactory.getProvider (WebViewFactory.java:95)
  at android.webkit.CookieManager.getInstance (CookieManager.java:46)
  at android.webkit.CookieSyncManager.sync (CookieSyncManager.java:108)
  at com.facebook.internal.Utility.clearCookiesForDomain (Utility.java:694)
  at com.facebook.internal.Utility.clearFacebookCookies (Utility.java:719)
  at com.facebook.login.WebViewLoginMethodHandler.tryAuthorize (WebViewLoginMethodHandler.java:104)
  at com.facebook.login.LoginClient.tryCurrentHandler (LoginClient.java:249)
  at com.facebook.login.LoginClient.tryNextHandler (LoginClient.java:211)
  at com.facebook.login.LoginClient.authorize (LoginClient.java:127)
  at com.facebook.login.LoginClient.startOrContinueAuth (LoginClient.java:108)
  at com.facebook.login.LoginFragment.onResume (LoginFragment.java:152)
  at android.support.v4.app.Fragment.performResume (Fragment.java:2401)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1465)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1740)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1809)
  at android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3217)
  at android.support.v4.app.FragmentManagerImpl.dispatchResume (FragmentManager.java:3181)
  at android.support.v4.app.FragmentController.dispatchResume (FragmentController.java:214)
  at android.support.v4.app.FragmentActivity.onResumeFragments (FragmentActivity.java:470)
  at android.support.v4.app.FragmentActivity.onPostResume (FragmentActivity.java:459)
  at android.app.Activity.performResume (Activity.java:6065)
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:3121)

此问题与 32/64 位设备之间的不匹配有关。 chromium.org 这里有一个漏洞:https://bugs.chromium.org/p/chromium/issues/detail?id=559720#c2

"Unsupported ABI: null" can mean a 32/64-bit mismatch. We've been seeing an issue when vendors issue OTAs which upgrade 64-bit devices from 32- to 64-bit Android. There's a bug in PlayStore where such devices will continue to get the 32-bit WebView. That may be what's happening here. We have an internal bug open for this but I can't say when it'll get fixed. :( Users can get to the right version by uninstalling WebView updates in Settings and then re-updating WebView in the Play Store.

引用上述来源的另一条评论:

This issue should sort itself out after the next time the user runs the play store app for any reason (the issue only occurs during automatic updates and running the play store fixes the incorrect state that makes it install the wrong package).