Google play store为了扩大自己的市场占有率,会让各大odm厂商预置GMS套件,但是前提是合法,即需要通过GMS认证,当然,未过认证的设备,在使用Google play store时,会频繁弹出设备未注册的提醒。
一些小厂为了节省这一笔认证费用,自然而然会想方设法绕过这一屏障,Google考虑到这一点,在提示的时候也有让用户自行激活的步骤,但是有些行业客户采购大批量的设备给他们自己的用户使用时,觉得用户自行激活很麻烦,影响体验,这样就需要ODM解决这一问题。
Google官方的提示有:
1)厂商需要联系google进行认证,否则无法使用
2)用户需要联系厂商,取得认证后方能使用
3)用户自行激活
通过用户自行激活的步骤,需要获取android_id:
adb shell settings get secure android_id
登录google帐户并且输入设备的android_id,等待少则半小时,多则一天的时间,就能正常使用google play store了。
那ODM该如何直接预置android_id,绕过提示呢?
由于一台设备的android_id是独一无二的,所以预置的话需要客户先提供能使用的android_id,这样如果出了问题(android_id被注销等),都由客户自行承担。
预置android_id方式如下:
1)添加预置的android_id
Index: frameworks/base/packages/SettingsProvider/res/values/defaults.xml
===================================================================
--- frameworks/base/packages/SettingsProvider/res/values/defaults.xml (版本 1453)
+++ frameworks/base/packages/SettingsProvider/res/values/defaults.xml (工作副本)
@@ -232,5 +232,7 @@
<string name="def_input_methods">com.google.android.inputmethod.pinyin/.PinyinIME</string>
+ <!-- google id from customer & should be overlaid by each customer -->
+ <string name="def_android_id" translatable="false">XXXXXXXXXXXXXXXXXXX</string>
</resources>
2)初始化时加载默认的android_id
Index: frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
===================================================================
--- frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java (版本 1453)
+++ frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java (工作副本)
@@ -2325,6 +2325,8 @@
R.string.def_time_format);
+ loadStringSetting(stmt, "google_android_id", R.string.def_android_id);
/*
* IMPORTANT: Do not add any more upgrade steps here as the global,
* secure, and system settings are no longer stored in a database
3)将android_id加入数据库
Index: frameworks/base/core/java/android/content/ContentResolver.java
===================================================================
--- frameworks/base/core/java/android/content/ContentResolver.java (版本 1453)
+++ frameworks/base/core/java/android/content/ContentResolver.java (工作副本)
@@ -47,6 +47,7 @@
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.provider.Settings;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
@@ -1719,6 +1720,16 @@
throw new IllegalArgumentException("Unknown URI " + uri);
}
try {
+ if (values != null) {
+ if (values.get("android_id") != null) {
+ String androidIDGoogle = Settings.System.getString(mContext.getContentResolver(), "google_android_id");
+ String androidId = values.getAsString("android_id");
+ values.clear();
+ values.put("android_id", androidIDGoogle);
+ }
+ }
long startTime = SystemClock.uptimeMillis();
int rowsUpdated = provider.update(mPackageName, uri, values, where, selectionArgs);
long durationMillis = SystemClock.uptimeMillis() - startTime;
希望这篇文章出来后,google不要看到…