AOSP编译时如何查看PRODUCT_PACKAGES最终内容及移除冗余包
AOSP编译相关问题解答
一、查看PRODUCT_PACKAGES完整内容的方法
有三种实用方法可以获取最终生效的PRODUCT_PACKAGES完整列表:
- 执行
make dump-products命令,该命令会输出所有产品配置的详细信息,包括完整的PRODUCT_PACKAGES集合。如果需要精准过滤,可搭配管道命令:make dump-products | grep -A 20 "PRODUCT_PACKAGES" - 先完成编译环境初始化:
. build/envsetup.sh,再选择目标设备:lunch <你的设备目标名>,之后将PRODUCT_PACKAGES输出到文件查看:echo $(PRODUCT_PACKAGES) > packages_list.txt(直接echo可能因内容过长显示不全) - 查看编译生成的中间文件:
out/target/product/<你的设备>/obj/PACKAGING/product_intermediates/product_info.txt,该文件包含最终生效的产品配置,其中就有PRODUCT_PACKAGES的完整内容。
二、关于移除冗余包的问题
你当前使用的BUILD_PHONY_PACKAGE方式是AOSP官方推荐的无侵入式包覆盖方案,但如果部分包无法移除,可能是以下原因:
- 包存在依赖关系:如果目标包被系统服务、其他应用或框架模块硬依赖,AOSP编译系统会自动保留该包以避免编译失败。可通过
make dependencies或make dump-products查看具体依赖链。 - 模块名错误:注意AOSP中需要指定的是模块名而非应用显示名称,部分厂商会自定义模块名(比如Dialer可能被命名为
TeleService),需通过上述查看PRODUCT_PACKAGES的方法确认正确的模块名。 - 条件编译标签添加:部分包是通过
PRODUCT_PACKAGES_DEBUG、PRODUCT_PACKAGES_RELEASE等条件标签添加的,这种情况下需要对应编译变体中配置覆盖规则,或检查条件编译逻辑。
另外,如果你能确保自己的配置文件在其他添加包的mk之后加载,也可以在自定义mk中直接过滤:
PRODUCT_PACKAGES := $(filter-out Dialer Calendar etc, $(PRODUCT_PACKAGES))
这种方式更直接,但同样要注意模块名和依赖问题。
内容的提问来源于stack exchange,提问作者himel
相关产品推荐
相关产品推荐

