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/
相关推荐
安东尼肉店4 小时前
Android compose屏幕适配终极解决方案
android
2501_916007475 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
feiyangqingyun6 小时前
基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
android·qt·ffmpeg
用户20187928316710 小时前
ANR之RenderThread不可中断睡眠state=D
android
煤球王子10 小时前
简单学:Android14中的Bluetooth—PBAP下载
android
小趴菜822710 小时前
安卓接入Max广告源
android
齊家治國平天下10 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO10 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel10 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢10 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱