Android编译命令理解

一、最常见的几个编译的命令:

source build/envsetup.sh
lunch 型号-编译类型
make -j12

深入理解到Android Build(编译)系统。

二、编译命令

编译Android源码的第一步:source build/envsetup.sh source命令是Linux运行脚本的命令类似“.”,文件build/envsetup.sh在加载的过程中,在device目录寻中寻找那些名称为vendorsetup.sh的文件,并且将他们加载到终端来。另外,在sdk/bash_completion目录下的adb.sh文件,也加载到终端来,它是使用adb命令的bash completion工能的。加载该文件之后,我们在运行adb相关的命令的时候,通过按tab键可以自动的帮助我们完成命令的输入。
1、新增了lunch,m,mm,mmm命令
2、将vendor和device目录下的vendorsetup.sh加载到终端;
输入lunch
当输入lunch命令输出一个lunch菜单,该菜单列出了当前Android源码支持的所有设备类型,比如:full-eng表示的设备full即为emulation,lunch 命令帮我们设置很多环境变量,设置环境变量,就配置好了Android编译环境。Android编译环境初始化之后,获得了以下三个东西。
通过执行lunch命令设置好TARGET_PRODUCT、TARGET_BUILD_VARIANT、TARGET_BUILD_TYPE和TARGET_BUILD_APPS等环境变量。以上几个参数在编译的时候使用的用处十分的重要。

2、代码编译
编译指令解释
m在源码树的根目录执行编译
mm编译当前路径下所有模块,但不包含依赖
mmm [module_path]编译指定路径下的所有模块,但不包含依赖
mma编译当前路径下所有模块,且包含依赖
mmma [module_path]编译当前路径下所有的模块,且包含依赖
make [module_name]无参数,则表示编译整个Android代码

下面列举部分模块的编译指令

模块make 命令mmm命令
initmake initmmm system/core/init
zygotemake app_processmmm frameworks/base/cmds/app_process
system_servermake servicesmmm frameworks/base/services
java frameworkmake frameworkmmm frameworks/base
framework资源make framework-resmmm frameworks/base/core/res
jni frameworkmake libandroid_runtimemmm frameworks/base/core/jni
bindermake libbindermmm frameworks/native/libs/binder

上述mmm 命令同样适用于mm/mma/mmma,编译系统采用的采用是增量编译,只会编译发生变化的目标文件。当需要重新编译所有的相关模块,则需要编译命令后增加参数 -B 比如make -B[module_name],或者mmm -B [module_path]

  • 对于m、mm、mmm、mma、mmma这些命令都是make方式来完成的。
  • mm/mmm编译的效率很高,而make/mma/mmma编译较缓慢
  • make/mma/mmma编译时会把所有的依赖模块一同编译,但是当依赖模块已经编译的情况,则使用mm/mmm编译。

代码搜索

搜索指令解释
cgrep所有C/C++文件执行搜索操作
jgrep所有java文件执行搜索操作
ggrep所有Gradle文件执行搜索操作
mangrep [keyword]所有AndroidManifest.xml文件执行搜索操作
mgrep [keyword]所有Android.mk文件执行搜索操作
sepgrep [keyword]所有sepolicy文件执行搜索操作
resgrep[keyword]所有本地res/*.xml文件执行搜索操作
sgrep[keyword]所有资源文件执行搜索操作

导航指令

导航指令解释
croot切换至Android根目录
cproj切换至工程的根目录
godir[filename]跳转到包含某个文件的文件夹

当每次修改某个文件后需要编译时,执行cproj后就会跳转到当前模块的根目录,也就是Android.mk文件所在目录,然后在执行mm指令,即可编译目标模块;当进入源码层级很深后,需要返回到根目录,执行croot一条指令完成,另外cd -指令可用于快速切换至上次的目录

其他指令

上述只是列举比较常用的指令,还有其他的指令,而且不同的build编译系统,支持的指令可能会存在一些差异,当忘记这些编译指令,可以通过执行hmm,查询指令的帮助信息。
最后在列举俩个比较常用的指令:

  • make clean:执行清理操作,等价于rm -rf out/
  • make update-api:更新API,在framework API改动后需执行该指令,Api记录在目录frameworks/base/api;
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页