当前位置: 首页 > article >正文

Android GMS集成

文章目录

  • 一、需求
  • 二、环境
  • 三、相关概念
    • 3.1 Google GMS
    • 3.2 MADA协议
  • 四、GMS全家桶
    • 4.1 OpenGapps
      • 4.1.1 OpenGapps版本差异
      • 4.1.2 OpenGapps批量解压
    • 4.2 MindTheGapps
    • 4.3 NikGApps
    • 4.4 BitGapps
    • 4.5 ApkMirror
  • 五、GMS集成
    • 5.1 应用集成
    • 5.1.1 应用目录
    • 5.1.2 应用mk脚本
    • 5.2 权限处理
    • 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批量解压

解压缩: 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,其他应用根据需要安装即可。

应用描述
GoogleServicesFrameworkGSF 是 Google Services Framework(Google 服务框架)的缩写,它是 Android 系统中一个重要的组件,用于支持 Google 移动服务(GMS)的正常运行。GSF 提供了与 Google 服务器通信的基础功能,是许多 Google 应用和服务(如 Google Play 商店、Gmail、Google Maps 等)的核心依赖。
GmsCoreGmsCore 是 Google Play Services(Google Play 服务)的核心组件之一,全称为 Google Mobile Services Core。它是 Android 设备上运行 Google 服务和应用的基础框架,提供了许多核心功能,例如推送通知、位置服务、账户同步等。
GooglePlayStoreGoogle 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/

http://www.kler.cn/a/580308.html

相关文章:

  • pytorch下载速度慢?试试离线安装
  • Yashan DB 实例管理
  • 蓝桥备赛(12)- 顺序表和 vector(上)
  • 《C#上位机开发从门外到门内》2-1:串口通信(UART)
  • 【linux】【文件】文件权限基础
  • 03 2个路由器构造三个子网相互访问, 3个路由器构造5个子网相互访问
  • PDF处理控件Aspose.PDF,如何实现企业级PDF处理
  • 测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试
  • 财务会计域——合并报表系统设计
  • RedisLimiter 限流器
  • 机器学习——逻辑回归实战2——预测拖欠款
  • Java jar包后台运行方式详解
  • 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
  • 服务器python项目部署
  • NineData 社区版正式上线,支持一键本地化部署
  • FPGA时序约束的几种方法
  • OpenCV实现视频背景提取
  • vtkDepthSortPolyData 根据相机视图方向对多边形数据进行排序
  • git安装,配置SSH公钥(查看版本、安装路径,更新版本)git常用指令
  • Qt从入门到入土(九) -model/view(模型/视图)框架