[Android 源码下相关编译命令及刷机]
从事Android源码开发,对于Android Build系统下的常用编译命令必须熟悉,现列出常用的一些命令。而关于Android Build系统的详细介绍请参看https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/
引用上述链接中的两段话,介绍一下Android Build系统:
整个 Build 系统中的 Make 文件可以分为三类:
-[1] Build 系统核心文件,此类文件定义了整个 Build 系统的框架,而其他所有 Make 文件都是在这个框架的基础上编写出来的。
Build 系统核心文件全部位于 /build/core目录下
-[2] 针对某个产品(一个产品可能是某个型号的手机或者平板电脑)的 Make 文件,这些文件通常位于 device 目录下,该目录下又以公司名以及产品名分为两级目录
-[3] 针对某个模块(关于模块后文会详细讨论)的 Make 文件。整个系统中,包含了大量的模块,每个模块都有一个专门的 Make 文件,这类文件的名称统一为“Android.mk”,该文件中定义了如何编译当前模块。Build 系统会在整个源码树中扫描名称为“Android.mk”的文件并根据其中的内容执行模块的编译。整个 Build 系统的入口文件是源码树根目录下名称为“Makefile”的文件,当在源代码根目录上调用 make 命令时,make 命令首先将读取该文件。Makefile 文件的内容只有一行:“include build/core/main.mk”。该行代码的作用很明显:包含 build/core/main.mk 文件。在 main.mk 文件中又会包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。
1、编译整个Android系统:
source build/envsetup.sh //初始化编译环境,并引入一些辅助的shell函数
lunch XXX //编译选项,不同的项目不同
make -j8 //开启8个线程编译,可任选,具体根据编译服务器的核数而定//上述编译后,还需要编译modem,一般需要先切换至modem目录,然后执行相关脚本,不同项目也不同。//需要说明的是,不编译modem或者modem编译失败,并不影响单独模块的编译;但可能会影响到刷机.
以下列出envsetup.sh中定义的常用函数,即命令如下:
名称 说明
croot 切换到源码树的根目录
m 在源码树的根目录执行 make
mm Build 当前目录下的模块
mmm Build 指定目录下的模块
mma 编译当前目录下的模块及其依赖项
mmma 编译指定目录下的模块及其依赖项
cgrep 在所有 C/C++ 文件上执行 grep
jgrep 在所有 Java 文件上执行 grep
resgrep 在所有 res/*.xml 文件上执行 grep
godir 转到包含某个文件的目录路径
printconfig 显示当前 Build 的配置信息
add_lunch_combo 在 lunch 函数的菜单中添加一个条目
2、常用的make 目标:
make help 显示主要的make目标
make clean 清理,等同于 rm -rf out/
make sdk 编译出 Android 的 SDK。
make clean-sdk 清理 SDK 的编译产物
make update-api 更新API, 在 framework API 改动之后,需要首先执行该命令来更新 API,公开的 API 记录在frameworks/base/api 目录下
make bootimage 生成boot.img
make recoveryimage 生成recovery.img
make userdataimage 生成userdata.img
make cacheimage 生成cache.img
make systemimage 生成system.img
3、产品的编译类型:、
//若设备还未root,可执行下述两个命令
adb root
adb remount
//执行push
adb push ... /system/app/Gallery2/
4、单独编译某个模块:
(1)cd到模块目录(含有Android.mk),然后执行命令:mm
(2)有些模块调用了系统的一些hide函数,因此需要在根目录下编译:make XXX ; 否则编译不过,例如SystemUI.
将编译好的模块(也就是apk),push到设备上的步骤如下:以图库模块为例。
//若设备还未root,可执行下述两个命令
adb root
adb remount
//执行push
adb push ... /system/app/Gallery2/
网友评论