• 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认证,在devicexxxxxxdevice.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账号。

  • 相关阅读:
    算法之冒泡排序
    实现秒杀的几个想法(续)
    乐观锁
    wifi-sdio接口
    解压vmlinuz和解压initrd(initramfs)
    supplicant
    wpa_supplicant测试
    qu
    netlink
    wpa_supplicant安装
  • 原文地址:https://www.cnblogs.com/blogs-of-lxl/p/14271830.html
Copyright © 2020-2023  润新知