文章目录
- 一、需求
- 二、环境
- 三、相关概念
-
- [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集成的流程。
二、环境
- 平台:UIS7870
- 版本:Android 13
- 梯子:一元机场
三、相关概念
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. 如果你到达这里,看到如下界面,恭喜你,大功告成,完美~