AccountManager无法在Sony XZ 7.1.1上添加帐户

Kar*_*erg 7 android sony accountmanager android-7.1-nougat

我正在开发的应用程序最近在用户更新到7.1.1手机索尼手机时出现了问题

在Sony XZ上,我们可以在尝试显式添加帐户时在日志中看到这一点:

AccountManagerService(1503):insertAccountIntoDatabase:帐户{name=something@something.com,type = com.myapplication.go},跳过,因为该帐户已存在

安装了应用程序,并在升级之前由我们的应用程序添加了帐户.似乎该帐户尚未完全删除/重新读取.

我们的应用程序如何从中恢复?为什么会这样?我已经在Nougat预览中读过类似的问题,但我们无法使用removeAccountExplicitly从中恢复,然后按照下面链接中的建议再次添加它.结果与上面相同,并且应用程序的卸载不会清除帐户,也不会重新启动手机.

AccountManager不会在Android N预览中添加自定义帐户

Dmi*_*sev 6

我们找到了问题的可能原因和解决方案.

症状

TL; DR这是索尼的错.

在我们的用户群中,看起来只有索尼XZ用户在将设备升级到7.1.1之前使用了我们的应用程序.

我们购买了几台Sony XZ设备(并最终将它们送回商店),将它们从Android 6.0升级到7.1.1并试图重现这个问题.但没有运气.

但是,我们发现了使用Android模拟器实现相同"症状"的另一种方法.步骤是:

  1. 启动模拟器
  2. 登录您的应用程序(以便将用户添加到AccountManager)
  3. 转到终端,然后执行以下操作

脚步:

adb shell
su
cd /data/system_de/0/
rm accounts_de.db
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动模拟器
  2. 从现在开始,您的问题是可重现的.

此外,如果您检查,/data/system_ce/0/accounts_ce.db您将看到这是一个仍包含您以前用户的数据库.这很可能是为什么AccountManager不允许您再次插入相同的用户.

看起来在更新到Android 7.1.1期间,索尼以某种方式损坏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
    );
}
Run Code Online (Sandbox Code Playgroud)

由于此帐户现在与原始帐户不同(由于\n字符),因此可以将其插入到AccountManager数据库中.

  • 我能够重现这个问题.但是,如果以常规方式添加帐户失败,"\n"后缀可能只是用作后备,对吧?否则,未将设备更新为Android 7.1.1的用户将再次面临同样的问题. (2认同)
  • @Mauin是的,我们只在addAccountExplicitly返回'false`时添加"\n" (2认同)