當前位置:菜譜大全網 - 菜譜 - 如何在Android Makefile中識別TARGET_PRODUCT?

如何在Android Makefile中識別TARGET_PRODUCT?

TARGET_PRODUCT決定編譯定制產品。

首先,編譯Android代碼通常使用:

#制作顯示命令

這實際上相當於下面的完整命令(詳見build/core/envsetup.mk)。

# TARGET _ ARCH = arm TARGET _ PRODUCT = generic TARGET _ BUILD _ TYPE = release make show命令

可以看出,默認情況下,編譯系統認為TARGET_PRODUCT是泛型。

那麽如何針對具體產品編譯Android呢?

這需要看Android Makefile如何解析環境變量TARGET_PRODUCT。

Android Makefile的引用關系如下

makefile->;build/core/main . MK-& gt;build/core/config . MK-& gt;build/core/env setup . MK-& gt;構建/核心/產品配置. mk

在build/core/product_config.mk中,編譯系統首先調用build/core/product.mk中定義的函數get-all-product-makefiles來

遍歷vendor的所有子目錄,找到vendor下的所有AndroidProducts.mk,不同子目錄下的AndroidProducts.mk中定義了PRODUCT_NAME、PRODUCT_DEVICE _ device等不同的信息。(我們也可以通過打開build/core/product_config.mk中的#$(dump-products)語句,讓控制臺在編譯時輸出所有產品信息)。然後build/core/product_config.mk會調用resolve-short-product-name將AndroidProducts.mk中定義的PRODUCT_DEVICE分配給TARGET_PRODUCT與TARGET_DEVICE匹配。

有了這個TARGET_DEVICE,回到build/core/config.mk,

將包含$(target _ dev CIE)/board config . MK。

board_config_mk := /

$(strip $(通配符/

$(SRC _ TARGET _ DIR)/board/$(TARGET _ DEVICE)/board config . MK/

vendor/*/$(TARGET _ DEVICE)/board config . MK/

))

包括$(board_config_mk)

這個配置文件BoardConfig.mk決定了目標系統的編譯屬性,比如使用ALSA還是不使用GENERIC_AUDIO等等。

另外,TARGET_DEVICE宏還決定了這裏的TARGET_DEVICE_DIR,因為TARGET_DEVICE_DIR走的是上面提到的BoardConfig.mk的路徑。

目標設備目錄:= $(patsubst %/,%,$(目錄$(board_config_mk)))

當然,Android的Ob目標輸出也是由TARGET_DEVICE決定的。請參見build/core/envsetup.mk。

目標_輸出_根_釋放:= $(輸出_目錄)/目標

目標_輸出_根_調試:= $(調試_輸出_目錄)/目標

目標輸出根:= $(目標輸出根_$(目標生成類型))

目標產品輸出根:= $(目標產品輸出根)/產品

產品輸出:= $(目標產品輸出根)/$(目標設備)

回到build/core/main.mk,編譯系統接下來要做的就是遍歷所有的word目錄,找到所有的Android.mk文件,並包含這些Android.mk文件。

#

#典型構建;包括我們能找到的任何Android.mk文件。

#

subdir_makefiles := /

$(shell build/tools/find leaves . py-prune = out-prune =。repo - prune=。git $(subdirs) Android.mk)

包含$(subdir_makefiles)

我們再來看看其中的壹個。

。/build/target/board/Android.mk

順便說壹下,它引用了

include $(目標設備目錄)/AndroidBoard.mk

按照上面TARGET_DEVICE_DIR的定義,它又進入了。

供應商下TARGET_DEVICE指向的目錄。這個mk文件定義了壹個特定的產品需要編譯安裝app和腳本。