未过GMS认证和CTS测试的ODM厂商如何使用google play

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 @@
     com.google.android.inputmethod.pinyin/.PinyinIME
+    
+    XXXXXXXXXXXXXXXXXXX
 
 

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不要看到…

你可能感兴趣的:(android_system,android)