控制整个 android 系统编译的 make 文件。其内容如下:
### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###
可以看出,实际上控制编译的文件是: build/core/main.mk
² make droid :等同于 make 命令。 droid 是默认的目标名称。
²
make all : make all 将 make 所有 make droid 会编译的项目。同时,将编译 LOCAL_MODULE_TAGS
定义的不包括
android tag
的模块。这将确保所有的在代码树里面同时有
Android.mk
文件的模块。
² clean-$(LOCAL_MODULE) 和 clean-$(LOCAL_PACKAGE_NAME) :
删除某个模块的目标文件。例如: clean-libutils 将删除所有的 libutils.so 以及和它相关的中间文件; clean-Home 将删除 Home 应用。
²
make clean
:删除本次配置所编译输出的结果文件。类似于:
rm –rf ./out/
<configuration>
²
make clobber
:删除所有配置所编译输出的结果文件。类似于:
rm –rf ./out/
² make dataclean
:
make dataclean
deletes contents of the data directory inside the current combo directory. This is especially useful on the simulator and emulator, where the persistent data remains present between builds.
²
make showcommands
:在编译的时候显示脚本的命令,而不是显示编译的简报。用于调试脚本。
² make
LOCAL_MODULE :编译一个单独得模块(需要有 Android.mk 文件存在)。
²
make targets
:将输出所有拟可以编译的模块名称列表。
注:还有一些命令,从 make 文件里面应该可以找到。本文不做探讨。
config.mk 文件的主要内容如下:
Ø 头文件的定义;(各种include 文件夹的设定)
在定义头文件的部分,还include 了pathmap.mk ,如下:
include $(BUILD_SYSTEM)/pathmap.mk
该文件设置include 目录和frameworks/base 下子目录等的信息。
Ø 编译系统内部mk 文件的定义; <Build system internal files>
Ø 设定通用的名称;<Set common values>
Ø Include 必要的子配置文件;<Include sub-configuration files>
n buildspec.mk
n envsetup.mk
n BoardConfig.mk
n /combo/select.mk
n /combo/javac.mk
Ø 检查BUILD_ENV_SEQUENCE_NUMBER 版本号;
In order to make easier for people when the build system changes, when it is necessary to make changes to buildspec.mk or to rerun the environment setup scripts, they contain a version number in the variable BUILD_ENV_SEQUENCE_NUMBER. If this variable does not match what the build system expects, it fails printing an error message explaining what happened. If you make a change that requires an update, you need to update two places so this message will be printed.
· In config/envsetup.make, increment the CORRECT_BUILD_ENV_SEQUENCE_NUMBER definition.
· In buildspec.mk.default, update the BUILD_ENV_SEQUENCE_DUMBER definition to match the one in config/envsetup.make
The scripts automatically get the value from the build system, so they will trigger the warning as well.
Ø 设置常用工具的常量;< Generic tools.>
Ø 设置目标选项;< Set up final options.>
Ø 遍历并设置SDK 版本;
默认情况下,buildspec.mk 文件是不存在的,表示使用的多少默认选项。Android 只提供了buildspec.mk 文件的模板文件build/buildspec.mk.default 。如果需要使用buildspec.mk 文件,请将该文件拷贝到<srcDir> 根目录下面,并命名为buildspec.mk 。同时,需要将模板文件里面的一些必要的配置项启用或者修改为你所需要的目标选项。
buildspec.mk 文件主要配置下面的选项:
Ø TARGET_PRODUCT :设置编译之后的目标(产品)类型;
可以设置的值在:build/target/product/ 中定义。比如,product 目录下有下面几个mk 文件:
² AndroidProducts.mk
² core.mk
² full.mk
² generic.mk
² languages_full.mk
² languages_small.mk
² sdk.mk
² sim.mk
那么,在这里可以设置的值就为上面几个mk 文件的前缀名称(generic 等)。
Ø TARGET_BUILD_VARIANT :设置image 的类型;
包括三个选项:user 、userdebug 、eng 。
usr : 出厂时候面向用户的image ;
userdebug : 打开了一些debug 选项的image ;
eng : 为了开发而包含了很多工具的image
Ø CUSTOM_MODULES :设置额外的总是会被安装到系统的模块;
这里设置的模块名称采用的是简单目标名,比如:Browser 或者MyApp 等。这些名字在LOCAL_MODULE 或者在LOCAL_PACKAGE_NAME 里面定义的。
LOCAL_MODULE
is the name of what's supposed to be generated from your Android.mk. For exmample, for libkjs, the LOCAL_MODULE
is "libkjs" (the build system adds the appropriate suffix -- .so .dylib .dll). For app modules, use LOCAL_PACKAGE_NAME
instead of LOCAL_MODULE
. We're planning on switching to ant for the apps, so this might become moot.
Ø TARGET_SIMULATOR :设置是否要编译成simulator <true or false> ;
Ø TARGET_BUILD_TYPE :设置是debug 还是release 版本 <release or debug> ;
Set this to debug or release if you care. Otherwise, it defaults to release for arm and debug for the simulator.
Ø HOST_BUILD_TYPE :设置Host 目标是debug 版还是release 版;
<release or debug, default is debug>
Ø DEBUG_MODULE_ModuleName :配置单个模块的版本是debug 还是release ;<ture or false>
Ø TARGET_TOOLS_PREFIX :工具名前缀,默认为NULL
Ø HOST_CUSTOM_DEBUG_CFLAGS/ TARGET_CUSTOM_DEBUG_CFLAGS :增加额外的编译选项LOCAL_CFLAGS 。
LOCAL_CFLAGS :If you have additional flags to pass into the C or C++ compiler, add them here. For example: LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
Ø CUSTOM_LOCALES :增加额外的LOCALES 到最总的image ;
Any locales that appear in CUSTOM_LOCALES but not in the locale list for the selected product will be added to the end of PRODUCT_LOCALES.
Ø OUT_DIR :编译之后文件保存路径。默认为<build-root>/out 目录;
Ø ADDITIONAL_BUILD_PROPERTIES :指定(增加)额外的属性文件;
Ø NO_FALLBACK_FONT :设置是否只支持英文(这将减少image 的大小)。<true, false>
Ø WEBCORE_INSTRUMENTATION :webcore 支持;
Ø ENABLE_SVG :SVG 支持;
Ø BUILD_ENV_SEQUENCE_NUMBER :编译系列号;
==========================================================
未完待续!... ...
==========================================================