GMS全称为GoogleMobile Service。GMS目前提供有Search、Search by Voice、Gmail、Contact Sync、Calendar Sync、Talk、Maps、Street View、YouTube、Play store等apk和服务。

        google为了确保全世界的硬件厂商设计和生产的安卓为基础的各种智能硬件产品的兼容性、稳定性,以及这些硬件与安卓各种自带的软件 APP 产品和服务的兼容性、稳定性,从7.0开始强制所有产品要进行Google GMS 认证,而且需要与签定MADA、AFA等一系列协议才能拿到GMS软件包,产品软硬件测试 由 3PL 执行。下面介绍下GMS包(以9.0为例,其他版本类似)中的内容以及编译方法。       

        从 Google 拿到的 GMS 包解压缩之后可以取得一个 partner_gms 的文件夹,里面放有所有的Google apps、Services 和参数配置,主要分为四类,五个文件夹:
1、apps/和apps_go两个目录放置所有 Google 的 apk,包含应用和服务类,apps是正常版本、apps_go是低内存的android go版本,编译时在脚本选择对应的版本。
2、etc-放置 Google 应用和服务类的系统配置。
3、frameworks放置 Google 应用和服务类的系统配置与 jar 库。
4、products放置编译配置与 Google 应用和服务类的系统配置。

        GMS 编译配置说明:GMS 的编译配置取决于 GMS 包 partner_gms/products 下的 gms_xx.mk。mk文件中内容简单说明如下:
1、# GMS home folder location
      定义ANDROID_PARTNER_GMS_HOME := vendor/partner_gms,这表示此段定义 GMS        HOME 路径,随意更改可能会造成编译失败等问题,不建议去修改。
2、#GMS mandatory core packages
      此为必要核心套件, 不建议删除任何一项目, 否则可能会导致无法预期的报错或是Google 认证失败。
3、GMS mandatory libraries
     Gms 相关库预置,不可删除。
4、# Overlay for GMS devices
      $(call inherit-product, device/sample/products/backup_overlay.mk)
      不可删除, 否则可能会造成 backup 等备份相关问题发生, 以及备份帐号中无法选择 google帐号等。

       $(call inherit-product, device/sample/products/location_overlay.mk)
       不可删除, 否则可能会造成 map, smartlock 等定位发生问题。

       PRODUCT_PACKAGE_OVERLAYS += \
                $(ANDROID_PARTNER_GMS_HOME)/products/assistant_gsa_overlay \
                $(ANDROID_PARTNER_GMS_HOME)/products/gms_overlay
       不可删除, 主要使样机具有 Factory reset protection 等功能

       # Overlay for GoogleDialer
       预置 GoogleDialer 时不可删除

       # Configuration files for GMS apps
       Gms 相关配置参数, 包含两类, 其中一类为默认应用的各种标准设置, 另外一类为部分Gms 应用可以获取的相关权限, 不建议删除任何一项目, 否则可能会导致无法预期的错误。

        # GMS mandatory application packages
        此段为必要的核心应用, CTS送测时不建议删除任何一项目, 否则 Google 认证会不过,注意 go 和非 go 的不同要求。

        # GMS comms suite
        Message 配置。

        # GMS optional application packages
        预置的 GMS 可选应用,可根据需求删减。

        # Overlay for SearchLauncherQuickStep
        SearchLauncherQuickStep ovlay的内容。

        # GMS sample application packages
        带gms的桌面布局demo代码。

        # Overrides
        PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
        GMS 基本 系统属性设定不可删, 相关属性值也不建议修改。

编译:在项目的.mk文件中加入如下语句就可以编译带gms的升级包:
           非go版本:$(call inherit-product-if-exists, vendor/partner_gms/products/gms.mk)
            go版本:$(call inherit-product-if-exists, vendor/partner_gms/products/gms_go.mk)

以上是简单描述,欢迎大家交流。153184759

04-18 18:15