繁体   English   中英

以编程方式将 Google 帐户注册到 Android 设备

[英]Registering a Google account to Android device programmatically

我一直在寻找解决这个问题的方法有一段时间(几天,而不是几分钟),但它非常有效地避开了我。

请注意,这不是关于启动注册程序的问题。 这必须在没有任何用户交互的情况下自动发生。

我想在我的自定义设备(其中 1000 个)中添加一个 Google 帐户。 该帐户主要用于激活设备上的 Google Play 商店,以便在有新版本可用时更新应用程序。

我现有的代码(我尝试过的最短代码段):

AccountManager mgr = AccountManager.get(this);
Account acc = new Account("email@gmail.com", "com.google");
mgr.addAccountExplicitly(acc, "password", new Bundle()));

自然产生一个

java.lang.SecurityException: caller uid 10047 is different than the authenticator's uid

那么我将如何真正实现这一目标? 我的设备已植根,因此如果这是唯一的方法,那不是障碍。

警告:此解决方案效果不佳。 请参阅注释以获取解释。

嗯,事实证明,这不是一件容易解决的事情。 我最终注册了一台设备,然后从中提取了用户文件。 用户文件的位置: /data/system/users/0/accounts.db (如果设备上有多个用户配置文件,最后一个目录可能会根据相关配置文件的不同而不同)。

我将此文件存储到我的应用程序的资产中(gzipped,确保扩展名不是 something.gz 因为它在打包过程中丢失了 - 没有费心检查原因)。

首先我检查我的用户是否已经存在:

AccountManager mgr = AccountManager.get(this);
for (Account acc: mgr.getAccountsByType("com.google")) {
  if (acc.name.equalsIgnoreCase("email@gmail.com"))
    return;
}

如果是这样,我只是跳过这一步。 否则我解压用户文件并覆盖现有文件(使用su )。 然后我还重新启动以确保更改已注册。

无法使用 addAccountExplicitly() 添加/创建 Google 帐户。 您只能为自己的服务添加帐户。 甚至您的设备已植根,因为它会被谷歌网络服务器拒绝。 有关更多详细信息,请查看此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM