Android编译过程详解之一 Android编译过程详解之二 Android编译过程详解之三 Android.mk解析 配置好环境变量后,接下来要做的就是build了。为了提高编译速度,我们自定义了一个go.sh的脚本文件,详细下面解释。另,编译的时候一般会在后面加一个-j8来实现多线程编译,如:
1 ./go.sh -j8 or make -j8/--jobs
参数“-j“ 和”–jobs ”指定了同时编译的线程数量,通常是编译主机 CPU 支持的并发线程总数的 1 倍或 2 倍(如:在一个 4 核,每个核支持两个线程的 CPU 上,可以使用 make -j8 或 make -j16)。在调用 make 命令时,如果没有指定任何目标,则将编译默认目标“droid”(下面详解),然后将会编译出完整的 Android 系统镜像。
build系统分类 整个build系统的Make文件可以分为三类:
build系统核心文件:定义整个build系统的框架,其他所有make文件都是在这个框架的基础上写出来的。
产品的make文件:位于device目录,通常以公司名和产品名分为两级目录,如:\device\qcom\msm8916_32。
模块的make文件:每个模块专用的make文件,kernel中统一名字为Makefile,其他为Android.mk。
build结果 所有的编译产物都将位于 /out 目录下,该目录下主要有以下几个子目录:
/out/host/:该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等。
/out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库。
/out/target/product//:包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。其中,是具体目标设备的名称。
/out/dist/:包含了为多种分发而准备的包,通过“make disttarget”将文件拷贝到该目录,默认的编译目标不会产生该目录。