![](/img/trans.png)
[英]Android - add Google account programmatically to non-Google device such as Nook
[英]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.