1. 程式人生 > 其它 >AOSP檢視當前要打進系統裡的都有哪些包

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.構建目標.變數名的形式