一、Android P之后的差异
参照phone版本整理出一版适合电视或者电视盒子相关GMS框架导入方法
可查看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 独立出来
其他一些区别包括EEA的都可以看相关Release Notes :
https://support.google.com/androidpartners_gms/answer/6173316?hl=en&ref_topic=6173346
移植最主要模块如下:
GoogleServicesFramework– 谷歌服务框架
Phonesky or Tubesky– 谷歌商店(手机版和TV版)
PrebuiltGmsCorePano– 谷歌核心服务
二、下载GMS刷机包
下载网址:
https://opengapps.org/
根据API,platform,variant下载合适的gms包。
Open Gapps各版本差异(
根据自己目标机器ROM选择合适版本下载
)
OpenGApps有几个不同的版本,aroma,super、stock、full、mini、micro、nano、pico,TV版本,tv_stock、tv_mini,具体详情如下:
super
包含了所有 GApps ,像韩语日语中文拼音中文注音输入法等。(请注意:如果你是用的是基于原生的 ROM ,本版本会替换相机,通讯录等等所有有关应用)。体积1G左右
stock
类似于 Google Pixel 出厂内置的 GApps ,相比 super 版少了其他语种的输入法以及 Google 地球等。(请注意:如果你是用的是基于原生的 ROM ,本版本会替换相机,通讯录等等所有有关应用)。体积820M~840M左右
full
与 stock 版所包含的内容相同,但此版本不会替换手机原本的应用。体积670~690M左右,
mini
包含基础的 Google 服务框架,以及一些影响力较大的 GApps ,相比 full 版去掉了 Docs 等应用。体积370M~390M左右
nano
包含基础的 Google 服务框架,但不会有其他 不必要的 GApps。体积160M~180M左右
aroma
基于super包,允许用户选择哪些apk进行安装
另外针对TV还有对应版本:
tvstock
stock的Tv版本
tvmini
基于nano版本加上tv版的gms服务和应用
三. 需要整合到android源码中
下载版本open_gapps-arm-9.0-tvmini-20210131,解压后内容如下:
OpenGapp 本身是使用installer.sh,进行安装的配置的;
对于生成开发版的gms框架系统的开发者来说,只需要把里面核心的几个app拿出来,验证下功能即可,install.sh 有点乱,不建议使用
Core目录下为谷歌服务核心文件和应用,需要预置到源码中(可以根据需要配置,前提是知道每个模块的作用)。
GApps目录下为一些功能应用,可不预置到源码中。
为了整合到系统源码,根据项目需要提取对应的文件,详细目录如下:
预置app时需要考虑apk版本是否为tv版,手机版本肯能在电视或者电视盒子上效果不佳甚至打开时会提示与设备不兼容。
(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)
注:这里主要是permission和config文件,不要盲目全部导入,需要耐心的看一下作用
(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本身的签名信息
,否则无法正常使用
四. 通过谷歌设备验证 (
TV版本没有经过这一步验证,谷歌要求必须使用Android TV或者现在主推的Google TV
)
- 不能修改 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账号。