Android编译输出out目录结构分析
Android编译完成之后,将会在根目录下生成一个out文件夹,所有生成的内容均放在这个文件夹中。
out/
$source .build/envsetup.sh有什么用?
多出一些命令:
-croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of themodules in the current directory.
- mmm: Builds all of themodules in the supplied directories.
- cgrep: Greps on alllocal C/C++ files.
- jgrep: Greps on all local Javafiles.
- resgrep: Greps on all local res/*.xml files.
-godir: Go to the directory containing a file.
编译文件分类
(1)总体配置类
主要用来设定相应的通用编译选项:
config文件 |
说明 |
build/core/config.mk |
Config文件的概括性说明 |
build/core/envsetup.mk |
generate目录构成等配置 |
build/target/product |
产品相关配置 |
build/target/board |
硬件相关的配置 |
build/core/combo |
编译选项配置 |
config.mk里面定义了各个module编译所需要使用的Host工具以及如何来编译各个模块。
envsetup.mk会读取由envsetup.sh写入环境变量中的一些变量,来配置编译过程中的输出目录。
product针对芯片配置来定义产品的配置,主要是APK方面的配置,比如哪些APK会包含在哪个product中,哪些APK在当前product中是不提供的。
board主要是涉及到硬件芯片的配置,比如是否提供硬件的某些功能,或者芯片支持浮点运算等等。
combo里面主要定义了各种Host和Target结合的编译器和编译选项。
(2)单个模块的编译
本地模块的Makefile文件就是Android.mk文件。Android编译的时候会通过下面的函数来遍历所有子目录中的Android.mk,一旦找到就不会再往子目录继续寻找。
subdir_makefiles+= \
(3)系统生成类主要指build/core/Makefile文件,这个文件定义了生成各种img的方式,包括ramdisk.img,urerdata.img, system.img, recovery.img等。
所有的Makefile都通过build/core/main.mk组织在一起,它定义了一个默认goals:droid,当我们在top目录下敲”make“实际上就等同于我们执行”make droid“。