AOSP查看当前要打进系统里的都有哪些包
发现问题:
修改系统时常常需要预置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.构建目标.变量名
的形式
本文来自博客园,作者:世间很大,转载请注明原文链接:https://www.cnblogs.com/oamha/p/16273135.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效