AOSP檢視當前要打進系統裡的都有哪些包
阿新 • • 發佈:2022-05-15
發現問題:
修改系統時常常需要預置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.構建目標.變數名
的形式