私のアプリは SyncAdapters を使用して、バックグラウンドでデータを同期します。OS 8.0 を実行し、Android for Work マネージド プロファイル用にセットアップされたデバイスで addAccountExplicitly を呼び出すと、SecurityException がスローされ、アカウントを正しく追加できません。
コールスタックは次のとおりです。
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 を実行している 2 つの GitHub プロジェクトを使用して、失敗を再現しました。
GitHub アプリ:
- https://github.com/googlesamples/android-testdpc
- https://github.com/googlesamples/android-BasicSyncAdapter
上記の例外のスローを再現する手順は次のとおりです。
- デバイスを出荷時設定にリセットし、初期状態の画面が表示されるまで待ちます。
- アプリケーション android-testdpc をインストールします。Android for Work マネージド プロファイル用のデバイスの設定を完了します。
- ポリシーを変更したり、デバイスを再起動したりしないでください。
- アプリケーション android-BasicSyncAdapter をインストールして起動します。
- Logcat がキャプチャします
私は am_crash: [7489,0,com.example.android.basicsyncadapter,950582854,java.lang.SecurityException,com.google.android.gm from uid 10075 は GET_ACCOUNTS,Parcel.java,1942 の実行を許可されていません]
その他の注意事項:
- Android 8.0 を搭載したデバイスでのみ SecurityException がスローされています。
- android-BasicSyncAdapter を起動する前にデバイスを再起動しても、SecurityException はスローされません。現在、ユーザー向けに提案されている回避策。
最初にデバイスを再起動せずに addAccountExplicitly を正常に呼び出す方法を見つけようとしています。