一、android 的build系统
android build系统可以分成三大块:
build/core 目录下,系统的框架和核心
device 目录,具体产品的配置文件
android.mk 各个模块的编译文件
**android 5.0 的build 系统开始支持64位系统。
android build 系统核心
build/core 目录下有几十个mk 文件以及一些shell脚本和perl脚本,构成了android build系统的基础和框架。编译命令有以下三个。
. build/envsetup.sh 建立android 编译环境
lunch 打印菜单让用户选择需要编译的模块。
make 编译系统
envsetup.sh 文件的作用
结尾会在device和vendor目录下搜索所有vendorsetup.sh文件的内容。device/lge/hammerhead下存在。
android 的编译命令
lunch | lunch<product_name>-<build_variant> 指定当前编译的产品。 |
tapas | |
croot | |
m | 编译整个源码,但是不用将当前目录切换到源码的根目录。 |
mm | 编译当前目录下的所有模块,但是不编译它们的依赖模块。 |
mmm | 编译指定目录下的所有模块,但是不编译它们的依赖模块 |
mma | 编译当前目录下的所有模块,同时编译它们的依赖模块。 |
mmma | 编译指定目录下的所有模块,同时编译它们的依赖模块。 |
cgrep | 对系统所有的C/C++文件执行grep命令。 |
ggrep | 对系统所有的本地的Gradle 文件执行grep命令。 |
jgrep | 对系统所有Java 文件执行grep文件。 |
resgrep | 对系统所有xml目录下的 XML文件执行grep命令。 |
sgrep | 对系统中所有源文件执行grep命令。 |
godir |
lunch命令的功能
执行完lunch命令后,系统会打印出当前配置所生成的环境变量。这些环境变量将会影响编译过程。
PLATFORM_VERSION_CODENAME=REL 平台版本名称,通常是AOSP(android open source project)
PLATFORM_VERSION=6.0.1 android平台版本号
TARGET_PRODUCT=leaderphone16 所编译的产品名称
TARGET_BUILD_VARIANT=userdebug 编译的产品类型(eng、user、userdebug)
TARGET_BUILD_TYPE=release 编译的类型(release、debug)
TARGET_BUILD_APPS= 编译android系统时,这个变量的值为null。使用build系统编译单个模块时,这个变量的值是所编译模块的路径。
TARGET_ARCH=arm64 编译目标的cpu架构
TARGET_ARCH_VARIANT=armv8-a 编译目标的cpu架构版本
TARGET_CPU_VARIANT=kryo 编译目标的cpu代号
TARGET_2ND_ARCH=arm 编译目标的第二cpu架构
TARGET_2ND_ARCH_VARIANT=armv7-a-neon 编译目标的第二cpu架构版本
TARGET_2ND_CPU_VARIANT=cortex-a53 编译目标的第二
HOST_ARCH=x86_64 编译平台的架构
HOST_OS=linux 编译平台使用的操作系统
HOST_OS_EXTRA=Linux-4.2.0-42-generic-x86_64-with-Ubuntu-14.04-trusty 编译平台操作系统的一些额外信息,包括内核版本号、产品名称、代号等
HOST_BUILD_TYPE=release
BUILD_ID=MMB29M Build_id的值会出现在编译的版本信息中,可以利用这个环境变量来定义公司特有的标识
OUT_DIR=out 指定编译结果的输出目录
修改 BUILD_ID的值
make BUILD_ID = “Android L”
**make命令会调用build/目录下的Makefile文件。
他的内容如下 include build/core/main.mk
Makefile文件
Makefile文件主要有三种内容构成:变量定义,函数定义、目标依赖规则。