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、产品的编译类型:
eng:工程机
user:最终用户机
userdebug:调试测试机
tests:测试机
4、单独编译某个模块:
(1)cd到模块目录(含有Android.mk),然后执行命令:mm
(2)有些模块调用了系统的一些hide函数,因此需要在根目录下编译:make XXX ; 否则编译不过,例如SystemUI.
将编译好的模块(也就是apk),push到设备上的步骤如下:以图库模块为例。
//若设备还未root,可执行下述两个命令 adb root adb remount //执行push adb push ... /system/app/Gallery2/
5、刷机:三种方式。
(1)使用平台提供的刷机软件exe,(可视化的用户界面)进行刷机。
(2)使用命令:
adb reboot edl //进入刷机模式, 非高通平台可能无效 在命令行切换目录至modem/fastboot; 点击update_all.bat运行即可
(3)使用命令,根据需要烧录指定镜像img或者所有img.(这些img在out/target/product/...目录下),烧录一个文件的命令如下,其他同理:
adb reboot bootloader //进入fastboot模式 fastboot flash system system文件【system.img文件全路径】 fastboot reboot //重启设备
使用命令行刷机,可能出现的问题:
例如:以system.img为例.
fastboot flash system ... sending 'system' (1048262 KB)... FAILED (remote: data too large) finished. total time: 0.016s 刷机出现上述问题,原因: fastboot.exe版本太低,在sdk/platform-tools/下更新fastboot.exe
6、其他刷机命令:
(1)http://bbs.zol.com.cn/sjbbs/d1763_170025.html
posted on 2019-07-30 14:36 Android之路 阅读(1297) 评论(0) 编辑 收藏 举报