修改系统时常常需要预置APK,这就要修改PRODUCT_PACKAGES
这个变量,那么如何查看这个数组的值呢?我们可能直接在mk文件中去打印它,后来发现打印它只会显示继承关系(即继承自了哪些mk文件),并不会打印当前已将添加了哪些包
$(warning $(PRODUCT_PACKAGES))
所以上面这种方式行不通。
发现build/core/product_config.mk
中定义了一个make的构建目标dump-products
,能够打印构建当前目标所定义的变量:
ifneq ($(filter dump-products, $(MAKECMDGOALS)),)
$(dump-products)
$(error done)
endif
这里调用了dump-products
,我们在build/core
目录全局搜一下这个变量,它是在build/core/product.mk
中定义的,
define dump-product
$(info ==== $(1) ====)\
$(foreach v,$(_product_var_list),\
$(info PRODUCTS.$(1).$(v) := $(PRODUCTS.$(1).$(v))))\
$(info --------)
endef
define dump-products
$(foreach p,$(PRODUCTS),$(call dump-product,$(p)))
endef
它是一个函数,针对每一个product
,循环打印该product
的_product_var_list
中定义的变量,而_product_var_list
是一个数组,定义如下:
_product_var_list := \
PRODUCT_NAME \
PRODUCT_MODEL \
PRODUCT_LOCALES \
PRODUCT_AAPT_CONFIG \
PRODUCT_AAPT_PREF_CONFIG \
PRODUCT_AAPT_PREBUILT_DPI \
PRODUCT_PACKAGES \
PRODUCT_PACKAGES_DEBUG \
PRODUCT_PACKAGES_ENG \
PRODUCT_PACKAGES_TESTS \
PRODUCT_DEVICE \
PRODUCT_MANUFACTURER \
PRODUCT_BRAND \
PRODUCT_PROPERTY_OVERRIDES \
PRODUCT_DEFAULT_PROPERTY_OVERRIDES \
PRODUCT_CHARACTERISTICS \
PRODUCT_COPY_FILES \
PRODUCT_OTA_PUBLIC_KEYS \
PRODUCT_EXTRA_RECOVERY_KEYS \
PRODUCT_PACKAGE_OVERLAYS \
DEVICE_PACKAGE_OVERLAYS \
PRODUCT_SDK_ATREE_FILES \
PRODUCT_SDK_ADDON_NAME \
PRODUCT_SDK_ADDON_COPY_FILES \
PRODUCT_SDK_ADDON_COPY_MODULES \
里面就有PRODUCT_PACKAGES
。
最终打印结果:
PRODUCTS.device/lge/bullhead/aosp_bullhead.mk.PRODUCT_PACKAGES := libfwdlockengine OpenWnn libWnnEngDic libWnnJpnDic libwnndict WAPPushManager Galaxy4 HoloSpiralWallpaper LiveWallpapers LiveWallpapersPicker MagicSmokeWallpapers NoiseField PhaseBeam PhotoTable Bluetooth BluetoothMidiService Camera2 Gallery2 Music MusicFX Launcher3 TestApp ....
另外,从打印结果可以看出构建目标的变量最终都被合并成:PRODUCTS.构建目标.变量名
的形式
手机扫一扫
移动阅读更方便
你可能感兴趣的文章