android怎么编译环境变量,Android Makefile如何解析环境变量TARGET_PRODUCT,完成编译定制product...

Android Makefile 的引用关系是这样的

Makefile -> build/core/main.mk

-> build/core/config.mk ->

build/core/envsetup.mk ->

build/core/product_config.mk

在build/core/product_config.mk 中编译系统首先调用

build/core/product.mk中定义的函数

get-all-product-makefiles ,来遍历整个vendor和device 的子目录,

找到vendor和device下所有的 AndroidProducts.mk, 不同子目录下的AndroidProducts.mk

中定义了PRODUCT_MAKEFILES指定产品对应的mk文件(如移植6410时的mini6410.mk文件),在mini6410.mk中定义

PRODUCT_NAME, PRODUCT_DEVICE 等信息,

如:PRODUCT_MANUFACTURER := aisino

PRODUCT_BRAND := aisino

PRODUCT_NAME := aisinoPad

PRODUCT_DEVICE := aisinoPad

PRODUCT_LOCALES := en_US zh_CN zh_TW ja_JP

(我们也可以通过 打开build/core/product_config.mk 中的#$(dump-products) 语句使控制台编译的时候输出所有product

的信息)

接着build/core/product_config.mk 会调用resolve-short-product-name

将TARGET_PRODUCT匹配的AndroidProducts.mk 中定义的 PRODUCT_DEVICE

赋值给TARGET_DEVICE。

有了这个TARGET_DEVICE, 再回到 build/core/config.mk,

会include $(TARGET_DEVCIE)/BoardConfig.mk

board_config_mk := /

$(strip $(wildcard /

$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk /

vendor/*/$(TARGET_DEVICE)/BoardConfig.mk /

))

include $(board_config_mk)

而这个配置文件BoardConfig.mk 决定了目标系统编译属性,比如使用ALSA还是不是 GENERIC_AUDIO

等等

另外在这里TARGET_DEVICE 宏也决定了TARGET_DEVICE_DIR, 因为TARGET_DEVICE_DIR

取的是上面提到的BoardConfig.mk 的路径。

TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir

$(board_config_mk)))

当然Android 的Ob目标输出也是由TARGET_DEVICE决定,见build/core/envsetup.mk

TARGET_OUT_ROOT_release := $(OUT_DIR)/target

TARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target

TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))

TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product

PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)

再回到 build/core/main.mk,

编译系统接着做的一个件事情是,遍历所有子目录,找到所有Android.mk文件,并将这些Android.mk文件include

进来

#

# Typical build; include any Android.mk files we can find.

#

subdir_makefiles := /

$(shell build/tools/findleaves.py --prune=out

--prune=.repo --prune=.git $(subdirs) Android.mk)

include $(subdir_makefiles)

我们再来看其中的

./build/target/board/Android.mk

,对了它引用了

include $(TARGET_DEVICE_DIR)/AndroidBoard.mk

由上面TARGET_DEVICE_DIR的定义,这下又进入了

vendor 下TARGET_DEVICE指向的目录了,这个mk文件中定义了特定Product需要编译和安装app 和

script.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值