Android 的编译环境

一、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文件主要有三种内容构成:变量定义,函数定义、目标依赖规则。

猜你喜欢

转载自blog.csdn.net/Jun_P/article/details/127037710