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账号。