我目前正在开发的应用程序最近在用户更新到 7.1.1 om 索尼手机时出现问题
在 Sony XZ 上,我们可以在尝试显式添加帐户时在日志中看到:
AccountManagerService( 1503): insertAccountIntoDatabase: Account {name=something@something.com, type=com.myapplication.go}, 跳过,因为该帐户已经存在
应用程序已安装,帐户已在升级前由我们的应用程序添加。似乎该帐户尚未完全删除/重新添加。
我们的应用程序如何从中恢复? 为什么会这样? 我在牛轧糖预览中读到过类似的问题,但我们无法使用 removeAccountExplicitly 从中恢复,然后按照下面链接中的建议再次添加它。结果同上,卸载应用不会清空账号,也不会重启手机。
AccountManager does not add custom account in Android N preview
最佳答案
我们找到了问题的可能原因和解决方案。
症状
TL;DR 这是索尼的错。
从我们的用户群来看,似乎只有 Sony XZ 用户在将设备升级到 7.1.1 之前使用过我们的应用。
我们甚至购买了几台 Sony XZ 设备(并最终将它们退回商店),将它们从 Android 6.0 升级到 7.1.1 并尝试重现该问题。但没有运气。
但是,我们找到了另一种使用 Android 模拟器实现相同“症状”的方法。步骤是:
- 启动模拟器
- 登录到您的应用(以便将用户添加到 AccountManager)
- 转到终端,然后执行以下操作
步骤:
adb shell
su
cd /data/system_de/0/
rm accounts_de.db
- 重启你的模拟器
- 从现在开始,您的问题可以重现。
此外,如果您检查 /data/system_ce/0/accounts_ce.db
,您会看到这是一个仍然包含您以前的用户的数据库。这很可能就是 AccountManager
不允许您再次插入同一用户的原因。
看起来在更新到 Android 7.1.1 期间,Sony 以某种方式损坏了包含原始帐户的 accounts_de.db
。
解决方案
由于数据库中已经存在同名帐户(并且您无法真正从那里删除它),我们基本上无法再次插入具有相同用户名的用户。但是,我们可以插入具有稍微更新的用户名的帐户:
if (!accountManager.addAccountExplicitly(account, password, bundle)) {
// We failed to add the account. Fallback to workaround.
accountManager.addAccountExplicitly(
new Account(username + "\n", accountType), // this line solves the issue
password,
bundle
);
}
由于此帐户现在不同于原始帐户(由于 \n
字符),因此可以将其插入到 AccountManager 数据库中。
关于android - AccountManager 无法在 Sony XZ 7.1.1 上添加帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664484/