Android 编译系统分析
android 里的 make le 文件主要分为 4 种:
1 配置文件 cong,主要用来配置 product,board 以及根据 host 端选择相应的工具及设定相
应的编译选项:
build/core/cong.mk summary of cong
build/core/envsetup.mk generate dir cong and so on
build/target/product product cong
build/target/board board cong
build/core/combo build ags cong
这里解释下这里的 board 和 product。borad 主要是设计到硬件芯片的配置,比如是否提供
硬件的某些功能,比如说 GPU 等等,或者芯片支持浮点运算等等。product 是指针对当前
的芯片配置定义你将要生产产品的个性配置,主要是指 APK 方面的配置,哪些 APK 会包含
在哪个 product 中, 哪些 APK 在当前 product 中是不提供的。
cong.mk 是一个总括性的东西,它里面定义了各种 module 编译所需要使用的 HOST 工
具以及如何来编译各种模块,比如说 BUILT_PREBUILT 就定义了如何来编译预编译模块。
envsetup.mk 主要会读取由 envsetup.sh 写入环境变量中的一些变量来配置 编译过程中的
输出目录,combo 里面主要定义了各种 Host 和 Target 结合的编译器和编译选项。
Module Compile
这类文件主要定义了如何来处理 Module 的 Android.mk,以及采用何种方式来生成目标
模块,这些模块生成规则都定义在 cong.mk 里面,我们可以看看:
CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_sta6c_library.mk
BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk
BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/sta6c_library.mk
BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_sta6c_library.mk
BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk
BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk
BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/mul6_prebuilt.mk
BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/sta6c_java_library.mk
BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk
BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk
BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk
除了 CLEAR_VARS 是清楚本地变量之外,其他所有的都对应了一种模块的生成规则,每
一个本地模块最后都会 include 其中的一种来生成目标模 块。大部分上面的.mk 都会包含