S版本编译后生成的apk在out_sys/目录
在配置文件加宏ProjectConfig.mk
#GMS
BUILD_GMS = yes
BUILD_AGO_GMS = no
GAPPS_PACKAGE_SetupWizard = no //谷歌开机向导
GAPPS_PACKAGE_Chrome = no
GAPPS_PACKAGE_Drive = no
GAPPS_PACKAGE_Gmail2 = no
GAPPS_PACKAGE_Duo = no
GAPPS_PACKAGE_Maps = no
GAPPS_PACKAGE_Music2 = no
GAPPS_PACKAGE_Photos = no
GAPPS_PACKAGE_Velvet = no
GAPPS_PACKAGE_Videos = no
GAPPS_PACKAGE_YouTube = no
GAPPS_PACKAGE_Hangouts = no
GAPPS_PACKAGE_CarrierServices = no
GAPPS_PACKAGE_GoogleContacts = no
GAPPS_PACKAGE_GoogleDialer = no
GAPPS_PACKAGE_Messages = no
GAPPS_PACKAGE_CalendarGoogle = no
GAPPS_PACKAGE_LatinImeGoogle = no
GAPPS_PACKAGE_SearchLauncherQuickStep = no
GAPPS_PACKAGE_FilesGoogle = no
GAPPS_PACKAGE_YTMusic = no
GAPPS_PACKAGE_AssistantShell = no
//上面的这些宏控都是可以显示在launcher上的应用,当然不包括核心应用,比如谷歌商店也显示桌面但是没有宏控,这些宏控是在vendor/google/products/gms.mk
但也不一定会编译到这个路径,具体路径需要看配置!
在vendor/google/gms.mk 看具体走了哪个gms.mk
可以看到里面有个宏控配值ifeq ($(strip $(EEA_TYPE)), type1)
EEA_TYPE这个宏控赋什么值,就调用哪个,源码是默认没定义的话是走else的那就是
else
$(call inherit-product-if-exists, vendor/google/products/gms.mk)
endif
如果赋值了比如说
else ifeq ($(strip $(EEA_TYPE)), eea_v2)
$(call inherit-product-if-exists, vendor/google/products/gms_eea_v2_type4c.mk)
那就是走vendor/google/products/gms_eea_v2_type4c.mk
这个宏控配置在ProjectConfig.mk可加上
EEA_TYPE = eea_v2,这种类型是过欧盟需要的
如果要增加或删除应用,就到对应的mk里面改
override/vendor/google/products/gms_eea_v2_type4c.mk
这个里面首句引用了
$(call inherit-product, vendor/google/products/eea_common.mk)
所以vendor/google/products/eea_common.mk这里也编译到了,两个文件都可以改
GMS_PRODUCT_PACKAGES += \
+ sysconfig_gks \
+ GoogleKidsSpace \
+ YouTubeKids \
+ Books \
下面三个应用新版的GMS认证需要加上,第一个十Google Kids Space的feture,也需要打开,adb shell "cmd package list features | grep -c KIDS_HOME_EXPERIENCE" 需要为1,
根据KIDS_HOME_EXPERIENCE 搜到在etc/sysconfig/gks.xml定义,然后在etc/sysconfig/Android.bp引用,名字就是sysconfig_gks,就相当于是个应用了
删除一些谷歌应用,有些可以override掉LOCAL_OVERRIDES_PACKAGES :=,有些是谷歌核心应用就无法被override
在vendor/google/products/gms.mk
# GMS mandatory core packages(20)
$(call inherit-product, build/target/product/product_launched_with_p.mk)
GMS_PRODUCT_PACKAGES += \
这里面就是谷歌核心应用,这些要删除override就不生效,只能删除mk文件内容让它无法编译主要是用了inherit-product这编译模式,里面还有个开机向导虽然也包含在里面也是核心应用,但是重新定义了编译模式,所以可以通过宏控关掉,应该也可以override掉
$(call gapps-install-modules-vars,TARGET_BUILD_VARIANT,user, \
SetupWizard \
) \
从注释中可以看到,inherit-product 函数除了会执行通过其参数传入的 Makefile 文件之外,还会额外做 3 件事:
1、继承通过参数传入的 Makefile 文件中的所有变量;
2、在 .INHERITS_FROM 变量中记录下这些继承关系;
3、在 ALL_PRODUCTS 变量中标识出当前操作的 Makefile 文件已经被访问过了(以免重复访问)。
而 include 则只会执行 Makefile 文件,不会进行上方所述的 3 个操作。
移除GMS包,去除谷歌所有应用及服务:
BUILD_GMS = no
BUILD_AGO_GMS= no
GAPPS_BUILD =
这三个宏都要加,注意,尤其是第三个,一定要写空
原理:
类似于下面的文件。编译若报错会出现路径,下面这个不是报错原因,只是个例子
vendor/google/ Android.mk
ifdef BUILD_GMS
ifneq ($(filter fuex,$(GAPPS_BUILD)),)
ifeq ($(strip $(BUILD_GMS)), yes)
ifneq ($(strip $(BUILD_AGO_GMS)), yes)
第二步,如果GAPPS_BUILD不为空(ifneq否定),那么就往下走,所以为空之后后面就不走了,报错的文件可能接下来走的话就有问题
加入gms包后连上网会有认证弹通知,若未锁fingerprint就会一直弹一直弹。如果需要不弹就是已认证,可以锁其他项目的
主要是三个宏
FREEME_PRODUCT_INFO_BRAND = YSF
FREEME_PRODUCT_INFO_NAME = Rugged_tablet_EEA
FREEME_PRODUCT_INFO_DEVICE = Rugged_tablet
上面只能保证这个名字过认证后不弹窗,都在ProjectConfig.mk
真正锁fingerprint 得加上
# lock fingerprint
BUILD_FINGERPRINT = YSF/Rugged_tablet_EEA/Rugged_tablet:12/SP1A.210812.016/1667361081:user/release-keys
BUILD_NUMBER = 1667361081
PLATFORM_SECURITY_PATCH = 2022-11-01 这个得问下跑测的同事具体的日期