Android 9.0 导入GMS组件及Google Play Store - sheldon_blogs

时间:2024-03-05 11:07:29

Android 9.0 导入GMS组件及Google Play Store

一、Android P之后的差异

可查看GMS P Initial Release Notes 了解:

1、P上增加了一些core app :AndroidPlatformServices、GoogleRestore、Device Health Services (Turbo)

2、GoogleContacts is Non-privileged ,其实2018-10 GMS 开始 8.1上也不再是特权app了。

3、AndroidPlatformServices、GoogleRestore 在P之前都是GmsCore的一部分,9.0 and later 分离出来了

4、关于Turbo这个,在原生Android one上是必须预置的,详细可参考文档Integrating Turbo apk - 20180816.pdf

其他一些区别包括EEA的都可以看相关Release Notes :https://support.google.com/androidpartners_gms/answer/6173316?hl=en&ref_topic=6173346

 

二、下载GMS刷机包

下载网址: https://opengapps.org/ 根据API,platform,variant下载合适的gms包。

Open Gapps各版本差异

OpenGApps有几个不同的版本,super、stock、full、mini、micro、nano、pico,很多人不知道差别是什么,这里说明一下

sup

包含了所有 GApps ,像韩语日语中文拼音中文注音输入法等。(请注意:如果你是用的是基于原生的 ROM ,本版本会替换相机,通讯录等等所有有关应用)。体积1G左右,如果System分区剩余空间不够,就会刷入失败。

stock

类似于 Google Pixel 出厂内置的 GApps ,相比 super 版少了其他语种的输入法以及 Google 地球等。(请注意:如果你是用的是基于原生的 ROM ,本版本会替换相机,通讯录等等所有有关应用)。体积820M~840M左右,如果System分区剩余空间不够,就会刷入失败。

full

与 stock 版所包含的内容相同,但此版本不会替换手机原本的应用。体积670~690M左右,如果System分区剩余空间不够,就会刷入失败。

mini

包含基础的 Google 服务框架,以及一些影响力较大的 GApps ,相比 full 版去掉了 Docs 等应用。体积370M~390M左右,如果System分区剩余空间不够,就会刷入失败。

micro

包含基础的 Google 服务框架和 Gmail 等常见 GApps。体积190~210M左右,如果System分区剩余空间不够,就会刷入失败。

nano

包含基础的 Google 服务框架,但不会有其他 不必要的 GApps。体积160M~180M左右,如果System分区剩余空间不够,就会刷入失败。

pico

包含最迷你的 Google 服务框架,但由于框架并非完整,部分 GApps 可能无法运行。体积110~120M左右,如果System分区剩余空间不够,就会刷入失败。

 

 

 

 

 

三. 预置

 下载版本 open_gapps-arm-9.0-stock-20201223,解压后内容如下:

Core和Optional目录下为谷歌服务核心文件和应用,需要预置到源码中。

GApps目录下为一些功能应用,可不预置到源码中。

为了整合到系统源码,提取需要的文件整理后目录如下:

├─gms
│  ├─app
│  │  ├─CalculatorGooglePrebuilt
│  │  │      Android.mk
│  │  │      CalculatorGooglePrebuilt.apk
│  │  │
│  │  ├─CalendarGooglePrebuilt
│  │  │      Android.mk
│  │  │      CalendarGooglePrebuilt.apk
│  │  │
│  │  ├─Chrome
│  │  │      Android.mk
│  │  │      Chrome.apk
│  │  │
│  │  ├─Drive
│  │  │      Android.mk
│  │  │      Drive.apk
│  │  │
│  │  ├─GoogleContactsSyncAdapter
│  │  │      Android.mk
│  │  │      GoogleContactsSyncAdapter.apk
│  │  │
│  │  ├─GoogleExtShared
│  │  │      Android.mk
│  │  │      GoogleExtShared.apk
│  │  │
│  │  └─LatinIMEGooglePrebuilt
│  │          Android.mk
│  │          LatinIMEGooglePrebuilt.apk
│  │
│  ├─priv-app
│  │  ├─AndroidMigratePrebuilt
│  │  │      Android.mk
│  │  │      AndroidMigratePrebuilt.apk
│  │  │
│  │  ├─CarrierSetup
│  │  │      Android.mk
│  │  │      CarrierSetup.apk
│  │  │
│  │  ├─ConfigUpdater
│  │  │      Android.mk
│  │  │      ConfigUpdater.apk
│  │  │
│  │  ├─GoogleBackupTransport
│  │  │      Android.mk
│  │  │      GoogleBackupTransport.apk
│  │  │
│  │  ├─GoogleContacts
│  │  │      Android.mk
│  │  │      GoogleContacts.apk
│  │  │
│  │  ├─GoogleExtServices
│  │  │      Android.mk
│  │  │      GoogleExtServices.apk
│  │  │
│  │  ├─GoogleFeedback
│  │  │      Android.mk
│  │  │      GoogleFeedback.apk
│  │  │
│  │  ├─GoogleOneTimeInitializer
│  │  │      Android.mk
│  │  │      GoogleOneTimeInitializer.apk
│  │  │
│  │  ├─GooglePartnerSetup
│  │  │      Android.mk
│  │  │      GooglePartnerSetup.apk
│  │  │
│  │  ├─GoogleRestore
│  │  │      Android.mk
│  │  │      GoogleRestore.apk
│  │  │
│  │  ├─GoogleServicesFramework
│  │  │      Android.mk
│  │  │      GoogleServicesFramework.apk
│  │  │
│  │  ├─Phonesky
│  │  │      Android.mk
│  │  │      Phonesky.apk
│  │  │
│  │  ├─PrebuiltGmsCorePi
│  │  │      Android.mk
│  │  │      PrebuiltGmsCorePi.apk
│  │  │
│  │  └─SetupWizard
│  │          Android.mk
│  │          SetupWizard.apk
│  │
│  └─system
│      ├─etc
│      │  ├─default-permissions
│      │  │      default-permissions.xml
│      │  │      opengapps-permissions.xml
│      │  │
│      │  ├─permissions
│      │  │      android.feature.additions.xml
│      │  │      com.google.android.maps.xml
│      │  │      com.google.android.media.effects.xml
│      │  │      privapp-permissions-google.xml
│      │  │
│      │  ├─preferred-apps
│      │  │      google.xml
│      │  │
│      │  └─sysconfig
│      │          google-hiddenapi-package-whitelist.xml
│      │          google.xml
│      │          google_build.xml
│      │          google_exclusives_enable.xml
│      │          nexus.xml
│      │          pixel_2018_exclusive.xml
│      │          pixel_experience_2017.xml
│      │          pixel_experience_2018.xml
│      │
│      ├─framework
│      │      com.google.android.maps.jar
│      │      com.google.android.media.effects.jar
│      │
│      └─lib
│              libjni_latinimegoogle.so
│
└─products
        gms.mk

 

 

其中google 商店为:Tubesky(TV版本)和 Phonesky(手机版本),根据平台导入对应的版本,否则打开时会提示与设备不兼容。

 

(1)对于非APK文件(system目录):

使用宏PRODUCT_COPY_FILES,在源码编译时将非APK文件拷贝到/system/下,在gms.mk里加上:

# Configuration files for GMS apps
PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,$(ANDROID_PARTNER_GMS_HOME)/system,/system)

 

(2)对于APK文件:

增加Android.mk预置到/system/app/或/system/priv-app/下,开启预编译减少第一次开机时间。

例如:Chrome.apk预置到/system/app/下,添加对应的Android.mk内容如下:

###############################################################################
# Chrome
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Chrome
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := Chrome.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := true
include $(BUILD_PREBUILT)

 

例如:AndroidPlatformServices.apk 预置到/system/priv-app/下,添加LOCAL_PRIVILEGED_MODULE := true

#
###############################################################################
# AndroidPlatformServices
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := AndroidPlatformServices
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := AndroidPlatformServices.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := true
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)

PS: 注意LOCAL_CERTIFICATE := PRESIGNED 保证使用APK本身的签名信息,否则无法正常使用

 

四. 通过谷歌设备验证

  • 不能修改 build/core/MakeFile 中 的BUILD_FINGERPRINT生成方式,BUILD_FINGERPRINT的拼接格式影响CTS认证和GMS ANDROID ID的生成,可能导致谷歌设备认证不通过
  • 挂上代理,进入Play商店,等待出现设备未验证的提示,此时才会生成一个GMS ANDROID ID
  • adb root ; adb shell \'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"\'    
  • https://www.google.com/android/uncertified/中填入 GMS ANDROID ID 即可。

 

      注:平台原厂一般会将对应的设备进行google认证,在\device\xxx\xxx\device.mk 文件中会配置对应的fingerprint,由以下信息组成:

BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(GP_TARGET_PRODUCT)/$(GP_TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)

  通过读取系统属性[ro.build.fingerprint]或[ro.vendor.build.fingerprint]查看fingerprint信息,如果设备已经过了google认证,则导入GMS包后可直接登录Google账号。