Android中make命令的目标
2017-08-04 18:26:33 +08 字数:1157 标签: Android Makefilemake命令的Target,由Makefile决定。
一般情况下,make <TAB>
可以通过Bash的补全,看到一个Makefile的所有Target。
而Android中的Makefile过于复杂,补全时会卡住,难以列出。
本文记录一些Android(8.0.0)平台项目中有用的make目标。
产物目标 ¶
Target | Description |
---|---|
all | 编译Android的一切(部分Target例外)。 |
droid | Android项目的默认Target,make droid 等价于make 。 |
droidcore | Android核心的产物,如system.img、boot.img等。 |
snod | 快速重新编译system.img。 |
vnod | 快速重新编译vendor image。 |
libandroid_runtime | 编译JNI framework。 |
framework | 编译Java framework。 |
services | 编译系统服务(Java)与相关。 |
apps_only | Android平台自带的上层应用。 |
files | 编译所有会真正安装到ROM中的Module。 |
sdk | 编译生成Android SDK。 |
ndk | 编译生成Android NDK。 |
docs | 在out/target/common/docs 生成文档。 |
notice_files | 生成所有NOTICE文件。 |
javac-check | 用javac(而非jack)编译java文件,需要在已经完整编译后使用。 |
Target之间,也是有复杂的相互关系的。 droid大概由droidcore(主要是中下层)和apps_only(主要是上层)两部分组成,而droidcore与apps_only也并非没有交集。
droidcore里还依赖了以下Target,其含义不做一一解释,但很容易猜出。
- ramdisk
- systemtarball
- boottarball
- userdataimage
- userdatatarball
- cacheimage
- bptimage
- vendorimage
- systemotherimage
- bootimage
- vbmetaimage
- auxiliary
特殊目标 ¶
Target | Description |
---|---|
help | 显示几个常用的Target。 |
nothing | 把所有Makefile都跑一遍,但什么也不干。 |
clean | 清理产物,等价于rm -rf out 。 |
modules | 打印所有参与编译的LOCAL_MODULE。 |
showcommands | 打印所有编译过程中实际执行的命令。(在Ninja中无用,大概已废弃。) |
package-stats | 统计所有以BUILD_PACKAGE形式生成的产物信息,包括位置、大小、dex占比等。 |
installed-file-list | 生成installed-file.txt 文件,内含所有要安装到ROM的文件与大小。 |
单独模块 ¶
Target | Description |
---|---|
<local_module> |
单独编译某个模块 |
clean-<local_module> |
单独清理某个模块 |
在已经成功编译过一次的情况下,可以通过指定LOCAL_MODULE,从项目根目录重新编译。
比如make netd
,可以单独编译system/netd
。
此外,通过mm
、mmm
等命令,也可以实现单独编译功能。
区别是,mm
需要在当前目录下有Android.mk
的位置执行,而mmm
需要给定一个有Android.mk
的路径。
比如,cd system/netd; mm
,mmm system/netd
。
其它 ¶
在AOSP(8.0)上,光是LOCAL_MODULE已经有了上万个,Target数目还在持续增长。
想查看其它的Target,可以从build/make/core/main.mk
中,按图索骥。