织物导致Android Pie用户崩溃

时间:2018-12-10 02:19:27

标签: android google-fabric

我正在运行一个Android应用程序,并为Crashlytics安装了Fabric。对于我的大多数用户而言,一切正常,没有问题,但是某些用户(所有用户都在运行android Pie,并且使用Google手机Pixel 2,Pixel 3)由于Fabric本身而导致崩溃,这似乎有事可做访问SharedPrefs,请参见下面的日志。

java.lang.RuntimeException: 
at android.app.ActivityThread.handleBindApplication 

(ActivityThread.java:5925)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:200)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1656)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6718)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: java.lang.IllegalStateException: 
  at android.app.ContextImpl.getSharedPreferences (ContextImpl.java:419)
  at android.app.ContextImpl.getSharedPreferences (ContextImpl.java:404)
  at android.content.ContextWrapper.getSharedPreferences (ContextWrapper.java:174)
  at io.fabric.sdk.android.services.persistence.PreferenceStoreImpl.<init> (PreferenceStoreImpl.java:39)
  at io.fabric.sdk.android.services.common.AdvertisingInfoProvider.<init> (AdvertisingInfoProvider.java:37)
  at io.fabric.sdk.android.services.common.IdManager.<init> (IdManager.java:114)
  at io.fabric.sdk.android.Fabric.with (Fabric.java:2288)
  at com.aaronbrecher.neverlate.NeverLateApp.onCreate (NeverLateApp.java:21)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1154)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5920)

1 个答案:

答案 0 :(得分:1)

当存储受到保护并通过LOCKED_BOOT_COMPLETED广播启动应用程序时,会发生此异常。

来自android.app.ContextImpl的代码:

if (getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.O) {
   if (isCredentialProtectedStorage()
       && !getSystemService(UserManager.class)
                .isUserUnlockingOrUnlocked(UserHandle.myUserId())) {
     throw new IllegalStateException("SharedPreferences in credential encrypted "
                            + "storage are not available until after user is unlocked");
   }
}