addAccountExplicitly抛出SecurityException,因为不允许com.google.android.gm执行GET_ACCOUNTS

时间:2017-11-29 02:34:35

标签: android android-syncadapter android-securityexception

我的应用使用SyncAdapters在后台同步数据。在运行OS 8.0并为Android for Work托管配置文件设置的设备上,调用addAccountExplicitly会抛出SecurityException并无法正确添加帐户。

这是callstack:

11-28 17:28:00.182 7291-7291/com.example.android.basicsyncadapter E/CreateSyncAccount: Failed
   java.lang.SecurityException: com.google.android.gm from uid 10074 not allowed to perform GET_ACCOUNTS
      at android.os.Parcel.readException(Parcel.java:1942)
      at android.os.Parcel.readException(Parcel.java:1888)
      at android.accounts.IAccountManager$Stub$Proxy.addAccountExplicitly(IAccountManager.java:1205)
      at android.accounts.AccountManager.addAccountExplicitly(AccountManager.java:875)
      at com.example.android.basicsyncadapter.SyncUtils.CreateSyncAccount(SyncUtils.java:58)
      at com.example.android.basicsyncadapter.EntryListFragment.onAttach(EntryListFragment.java:148)

我使用在Pixel上运行8.0的两个GitHub项目重现了失败: 指纹=谷歌/马林/马林:8.0.0 / OPR3.170623.013 / 4397526:用户/释放密钥

GitHub应用程序:

  1. https://github.com/googlesamples/android-testdpc
  2. https://github.com/googlesamples/android-BasicSyncAdapter
  3. 以下是重现抛出上述异常的步骤:

    1. 恢复出厂设备并等待现成的屏幕出现。
    2. 安装应用程序android-testdpc。完成Android for Work托管配置文件的设置设置。
    3. 请勿更改任何政策,也不要重启设备。
    4. 安装应用程序android-BasicSyncAdapter并启动它。
    5. Logcat将捕获
    6.   

      我am_crash:[7489,0,com.example.android.basicsyncadapter,950582854,java.lang.SecurityException,来自uid 10075的com.google.android.gm不允许执行GET_ACCOUNTS,Parcel.java,1942] < / p>

      附加说明:

      • 我看到仅在安装了Android 8.0的设备上抛出SecurityException。
      • 在启动android-BasicSyncAdapter之前重新启动设备不会导致抛出SecurityException。目前建议为用户提供解决方案。

      我试图找出如何成功调用addAccountExplicitly而无需先重启设备。

1 个答案:

答案 0 :(得分:0)

我的Google Pixel设备收到了我安装的8.1更新。使用这两个应用程序重新测试:

  1. https://github.com/googlesamples/android-testdpc
  2. https://github.com/googlesamples/android-BasicSyncAdapter
  3. 然后按照重现的步骤,不再抛出SecurityException。

    为了验证测试应用是否已更改以解决问题,我使用指定的8.0 ROM映像刷新了Pixel设备。 Retested和SecurityException以相同的方式抛出。

    在OS 8.0版之后,问题似乎已得到解决。