Android GMS集成

文章目录

  • 一、需求
  • 二、环境
  • 三、相关概念
    • [3.1 Google GMS](#3.1 Google GMS)
    • [3.2 MADA协议](#3.2 MADA协议)
  • 四、GMS全家桶
    • [4.1 OpenGapps](#4.1 OpenGapps)
      • [4.1.1 OpenGapps版本差异](#4.1.1 OpenGapps版本差异)
      • [4.1.2 OpenGapps批量解压](#4.1.2 OpenGapps批量解压)
    • [4.2 MindTheGapps](#4.2 MindTheGapps)
    • [4.3 NikGApps](#4.3 NikGApps)
    • [4.4 BitGapps](#4.4 BitGapps)
    • [4.5 ApkMirror](#4.5 ApkMirror)
  • 五、GMS集成
    • [5.1 应用集成](#5.1 应用集成)
    • [5.1.1 应用目录](#5.1.1 应用目录)
    • [5.1.2 应用mk脚本](#5.1.2 应用mk脚本)
    • [5.2 权限处理](#5.2 权限处理)
    • [5.3 Google认证](#5.3 Google认证)
  • 六、参考资料

一、需求

由于公司业务的需要,客户要发布海外版本,故需要内置google服务。

GMS规范化的集成,需要跟Google签MADA等协议,而对于普通的Rom开发团队来说,是很难有资质去跟google要资源。

故有必要去了解一下Android GMS相关知识,才能更好地理解GMS集成的流程。

二、环境

  1. 平台:UIS7870
  2. 版本:Android 13
  3. 梯子:一元机场

三、相关概念

3.1 Google GMS

Google GMS(Google Mobile Services,谷歌移动服务)是谷歌为安卓(Android)设备提供的一套核心应用、API(应用程序接口)和服务的集合。它不属于安卓开源系统(AOSP)的一部分,而是由谷歌授权给设备制造商,需通过谷歌认证才能预装在设备上。

1、核心应用:

  • Google Play 商店(应用下载平台)
  • Gmail、YouTube、Google Maps、Chrome 等谷歌官方应用
  • Google Drive、Google Photos 等云服务
  • Google 搜索和语音助手(Google Assistant)

2、底层服务与 API:

  • 服务:提供推送通知、账号同步、定位、地图服务等基础功能。
  • 安全服务:如 Google Play Protect(病毒扫描)、设备定期安全更新。
  • 开发接口:如 Firebase(云服务)、Google Sign-In(账号登录)、地图 SDK 等,帮助开发者集成谷歌功能。

3.2 MADA协议

MADA协议(Mobile Application Distribution Agreement,移动应用分发协议)是谷歌与安卓设备制造商(如手机厂商)之间签署的核心商业协议,用于规范谷歌移动服务(GMS)在设备上的预装和分发。该协议是设备厂商获得GMS授权的前提,也是谷歌控制安卓生态的关键手段。

1、强制预装谷歌应用

厂商若想预装Google Play商店等GMS服务,必须按照协议要求捆绑安装一整套谷歌应用(称为"GMS全家桶"),例如:

  • Google Play商店、Google搜索、Chrome浏览器
  • YouTube、Gmail、Google Maps、Google Drive等。
  • 部分协议版本还要求将Google搜索设为默认搜索引擎,并在主屏固定显示"Google文件夹"。

2、限制竞争对手服务

协议中可能包含排他性条款,例如:

  • 禁止厂商在设备上预装与谷歌服务直接竞争的第三方应用(如其他应用商店或搜索引擎)。
  • 限制厂商开发或推广基于安卓分支(如AOSP)的衍生系统。

3、分成与利益绑定

  • 谷歌通过预装应用获取用户流量和广告收入,例如Google搜索的广告分成。
  • 厂商需配合谷歌的服务更新和安全策略(如定期推送Google Play服务更新)

四、GMS全家桶

目前网上有很多GMS相关的app和服务框架,但是各种东拼西凑,适配到项目上后,可能会有七七八八的问题(闪退、权限、商店无法下载app等),很容易怀疑人生。如下推荐几个Gapps套件的下载地址,亲测可行,大家可按需下载。

4.1 OpenGapps

Open GApps 是一个开源项目,旨在为 Android 设备提供 Google Apps 的预构建包。该项目的主要目标是简化用户在非 Google 官方发布的 Android 设备上安装 Google 服务的过程。Open GApps 支持多种架构,包括 arm, arm64, x86 和 x86_64,并且提供了多种不同的 GApps 包,以满足不同用户的需求。

OpenGApps目前仅支持Android4.4-Android11版本‌,目前不再维护。

下载地址: https://opengapps.org/

4.1.1 OpenGapps版本差异

版本 说明
pico 此软件提供最小Gapps安装。在此软件包中,您将找到Google系统基础框架,Google Play商店,Google日历同步,拨号程序框架和部分Play商店应用程序
nano 此套餐具有最小的Google足迹但仍享有"Okay Google"和Google搜索。 在此软件包中,您将找到核心Google系统库,Google Android共享服务,离线语音文件,Google Play商店,Google日历同步,媒体人脸检测,面部解锁,拨号程序框架和部分Play商店应用程序
micro 此软件包专为系统分区较小的旧设备用户或喜欢简约的用户而设计。在此软件包中,您将找到核心Google系统包,Google Android共享服务,离线语音文件,Google Play商店,Google Exchange服务(替换stock/AOSP Exchange Services),媒体人脸检测,面部解锁,拨号程序框架和部分Play商店应用程序
mini 此套餐拥有部分常用Google应用且可以自行安装余下应用。在此软件包中,您将找到核心Google系统包,Google Android共享服务,离线语音文件,Google Play商店,Google Exchange服务(替换stock/AOSP Exchange Services),媒体人脸检测,面部解锁,拨号程序框架和部分Play商店应用程序
full 此套餐与Stock套餐类似,不同之处在于它不包含Google相机和Google键盘,也不会删替换stock AOSP自带浏览器,相机,电子邮件,图库,启动器,键盘,短信应用,Pico TTS或WebView。 如果您更喜欢使用stock/AOSP应用程序,则此套餐专为您而设计。在此软件包中,您将找到核心Google系统库,Google Android共享服务,离线语音文件,媒体人脸检测,面部解锁,Google Play商店,Google Exchange服务(替换stock/ AOSP Exchange Services),拨号程序框架和部分Play商店应用程序
stock 此套餐包括最新谷歌手机标配的所有Google应用。 在此软件包中,您将找到核心Google系统库,Google Android共享服务,离线语音文件,媒体人脸检测,面部解锁,Google Play商店,Google Exchange Services(替换stock/AOSP Exchange Services),拨号程序框架和大部分Play商店应用程序
super 此套餐包括Google设备上提供的所有Google应用。 在此软件包中,您将找到核心Google系统库,Google Android共享服务,离线语音文件,媒体人脸检测,面部解锁,Google Play商店,Google Exchange服务(替换stock/AOSP Exchange服务),拨号程序框架和大部分Play商店应用程序

ps:具体差异可以参考:https://huaweicloud.csdn.net/64eeac4ca3cccc782cc57e9f.html

4.1.2 OpenGapps批量解压

shell 复制代码
解压缩: find -name '*.lz' |xargs lzip -d
解tar包: for file in *.tar; do tar xvf $file; done

4.2 MindTheGapps

‌MindTheGapps‌是一个为Android设备提供的Google应用服务框架(GApps)套件,由Howard Wu和S1204开发,目前仅支持Android9.0之后的版本。

下载地址: https://sourceforge.net/projects/wsa-mtg/files/

4.3 NikGApps

NikGApps‌是一个专为Android用户设计的开源项目,旨在提供自定义的Google Apps软件包。支持 Android 15 (V)、14 (U)(定期更新)和 Android 13 (T)、12L (SL)、12 (S)、11 ®、10 (Q)(根据需要

下载地址: https://nikgapps.com/

4.4 BitGapps

BiTGApps是一个定制的谷歌应用程序包,用于在自定义Android操作系统中加载谷歌应用程序。支持Android 15.0到7.1版本。

下载地址: https://bitgapps.io/#google_vignette

4.5 ApkMirror

‌ APKMirror‌是一个广受赞誉的APK镜像网站,提供各种版本的APK文件下载,包括最新版本和历史版本。该网站每日更新,涵盖不同架构和DPI的APK,确保用户能够找到适合自己的安装包‌

下载地址: https://apk-mirror.net/

五、GMS集成

谷歌全家桶中有三个是核心应用,必须安装的:GoogleServicesFramework、GmsCore、GooglePlayStore,其他应用根据需要安装即可。

应用 描述
GoogleServicesFramework GSF 是 Google Services Framework(Google 服务框架)的缩写,它是 Android 系统中一个重要的组件,用于支持 Google 移动服务(GMS)的正常运行。GSF 提供了与 Google 服务器通信的基础功能,是许多 Google 应用和服务(如 Google Play 商店、Gmail、Google Maps 等)的核心依赖。
GmsCore GmsCore 是 Google Play Services(Google Play 服务)的核心组件之一,全称为 Google Mobile Services Core。它是 Android 设备上运行 Google 服务和应用的基础框架,提供了许多核心功能,例如推送通知、位置服务、账户同步等。
GooglePlayStore Google Play Store(Google Play 商店)是 Android 设备上官方应用商店,由 Google 开发和维护。它是用户下载和更新应用程序、游戏、电影、书籍和其他数字内容的主要平台。Google Play Store 是 Google 移动服务(GMS)的核心组件之一,只有通过 GMS 认证的设备才能预装 Google Play Store。

5.1 应用集成

这三个应用是Android系统的核心组件,需要与系统深度集成,普通用户无法直接安装。

5.1.1 应用目录

xxx/partner_gms$ tree
.
├── apps
│   ├── GoogleServicesFramework
│   │   ├── Android.mk
│   │   └── GoogleServicesFramework.apk
│   ├── Phonesky
│   │   ├── Android.mk
│   │   └── Phonesky.apk
│   └── PrebuiltGmsCore
│       ├── Android.mk
│       └── PrebuiltGmsCore.apk
├── permissions
│   ├── default-permissions.xml
│   ├── privapp-permissions-google.xml
│   └── split-permissions-google.xml
├── products
│   └── gms.mk
└── readme.txt

5.1.2 应用mk脚本

Step 1. 如下为GoogleServicesFramework.mk,其他两个应用也类似处理即可。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := GoogleServicesFramework
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app
LOCAL_SRC_FILES := GoogleServicesFramework.apk
include $(BUILD_PREBUILT)

Step 2. gms.mk需要将三个模块,打包到Android系统。

$(warning cheerzing gms.mk)
PRODUCT_PACKAGES += Phonesky \
    GoogleServicesFramework \
    PrebuiltGmsCore \

5.2 权限处理

Step 1. 当我们将app扔进system分区后,重启设备后,开机log会发现一堆密密麻麻的错误信息。那是因为GMS全家桶中,有一些应用需要申请权限,但是这些权限在系统中是没有的,需要我们手动添加。

Step 2. 遇事不要慌,先到Gapp套件下,一般会有对应应用需要配置的权限,拷贝过来即可。我们需要将权限文件预置到system/etc/permissions/目录下。如下为OpenGapps相关权限文件:

Step 3. gms.mk Android系统编译打包进系统

PRODUCT_COPY_FILES += \
	xxx/partner_gms/permissions/privapp-permissions-google.xml:system/etc/permissions/privapp-permissions-google.xml \
	xxx/partner_gms/permissions/split-permissions-google.xml:system/etc/permissions/split-permissions-google.xml \
	xxx/partner_gms/permissions/default-permissions.xml:system/etc/permissions/default-permissions.xml

5.3 Google认证

Step 1. 当我们集成了GMS全家桶后,配置了权限,重启设备后,会发现Google Play Store无法打开,提示认证失败。

Step 2. 遇事不要慌,这是因为我们的设备未经认证,需要我们去Google官方认证。按照注册流程,注册一个账号即可。
Goole官方认证: https://www.google.com/android/uncertified/

Step 3. 注册完设备id后,需要将设备的 GoogleServicesFramework、GmsCore、GooglePlayStore三个应用的缓存数据清空并重启应用。

Step 4. 由于每台设备对应的android_id都不一样,我们不可能每台设备都去官网认证。所以...只能在框架层动动手脚了。如下是参考网友的做法,亲测有效,与君共勉。

--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -2398,6 +2399,19 @@ public abstract class ContentResolver implements ContentInterface {
             throw new IllegalArgumentException("Unknown URI " + uri);
         }
         try {
+            if (values != null) {
+                if (values.get("android_id") != null && ("com.google.android.gms".equals(getPackageName()) || "com.google.android.gsf".equals(getPack
+                    String androidIDGoogle = "注册Android_id";
+                    String androidId = values.getAsString("android_id");
+                    values.clear();
+                    values.put("android_id", androidIDGoogle);
+                }
+            }

             long startTime = SystemClock.uptimeMillis();
             int rowsUpdated = provider.update(mContext.getAttributionSource(),
                     uri, values, extras);

Step 5. 如果你到达这里,看到如下界面,恭喜你,大功告成,完美~

六、参考资料

  1. google设备注册:https://www.google.com/android/uncertified/
  2. Gapps介绍:http://www.360doc.com/content/23/0929/22/10519289_1098455407.shtml
  3. gms认证:https://blog.csdn.net/HuanWen_Cheng/article/details/143576555
  4. DeepSeek:https://chat.deepseek.com/
相关推荐
云深不知处㊣3 小时前
【社交+陪玩服务】全场景陪玩系统源码 小程序+H5双端 社群互动+即时点单+搭建教程
android·小程序·社交源码·找搭子系统源码·陪玩系统源码
casual_clover4 小时前
Kotlin 中实现静态方法的几种方式
android·kotlin
yzpyzp4 小时前
kotlin的?: 操作符(Elvis操作符)
android·kotlin
buleideli4 小时前
Android项目优化同步速度
android·gradle
tangweiguo030519875 小时前
Android 蓝牙工具类封装:支持经典蓝牙与 BLE,兼容高版本权限
android·gitee
cheese-liang6 小时前
Excel中使用VBA自动生成排班表
android·excel
程序员正茂6 小时前
Unity安卓Android从StreamingAssets加载AssetBundle
android·unity·assetbundle·streamingassets
tmacfrank8 小时前
Compose 实践与探索一 —— 关键知识与概念详解
android·ui·kotlin·android jetpack
尼古拉斯大锅盖10 小时前
Android代码最新快速扫描获取手机内图片、视频、音频、文档等文件
android·kotlin
_祝你今天愉快10 小时前
Android12 系统源码编译及踩坑全攻略
android·源码