簡體   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