我目前正在开发的应用程序最近显示了用户更新为7.1.1 om sony Mobiles
的问题在索尼XZ上,我们可以在数目中看到这一点,试图在日志中添加添加:
AccountManagerService(1503(:insertaccountintodatabase:account {name = something@something.com,type = com.myapplication.go},由于帐户已经存在
而跳过已安装了该应用程序,并在升级之前由我们的应用程序添加了帐户。似乎该帐户尚未完全删除/读取。
我们在应用程序中如何从中恢复?为什么会发生这种情况?我已经阅读了Nougat Preview中的类似问题,但是我们无法通过RemoveAccountSplocifical恢复,然后按照下面的链接中的建议再次添加它。结果与上述相同,并且该应用程序的卸载尚未清除帐户,并且电话也不重新启动。
AccountManager不在Android N Preview中添加自定义帐户
我们找到了问题的可能原因和解决方案。
症状
tl; dr 这是索尼的错。
从我们的用户群中,看起来只有Sony XZ用户在将设备升级到7.1.1之前使用了我们的应用程序。
。我们到达了几个Sony XZ设备(并最终将它们返回商店(,将它们从Android 6.0升级到7.1.1,并试图重现该问题。但是没有运气。
但是,我们找到了使用Android模拟器达到相同"症状"的另一种方法。步骤是:
- 启动模拟器
- 登录到您的应用程序(以便将用户添加到帐户管理器中(
- 转到终端,进行以下
步骤:
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数据库。
该问题是Google知道的:https://issuetracker.google.com/issues/142699760