背景:
经常在做系统aosp开发编译过程中,主要使用最多的是make命令,搜索代码内容时候用的最常用是grep命令,但其实在aosp系统本身是支持很多高效率的编译和搜索内容命令。这块的高效命令其实在系统源码的 build/envsetup.sh文件中有进行相关的详细定义。
下面将对这些命令使用进行相关介绍。
构建命令体系
各个命令详解
m 全系统 完整依赖链 全新构建/重大修改后 m -j32
mm 当前目录模块 跳过依赖 模块快速迭代 cd packages/apps/Settings && mm
mmm 指定路径模块 跳过依赖 跨目录模块编译 mmm frameworks/base/core/res
mma 当前目录模块+依赖 递归依赖 接口变更后的安全编译 mma -j16
mmma 指定路径模块+依赖 递归依赖 跨模块修改验证 mmma system/core/
使用案例
# 限定编译特定目标
mmm packages/apps/Calculator:CalculatorTests
# 并行编译优化
mmma -j$(($(nproc)*3/2)) frameworks/base/
# 仅检查依赖不编译
m nothing
# 快速重建system.img
m snod
目录导航命令
croot
功能:快速返回源码根目录
等效命令:cd $(gettop)
godir
功能:智能定位文件路径
参数:
-i:不区分大小写搜索
-n:显示匹配结果但不跳转
示例:
godir AndroidManifest.xml
godir -i R.java
代码搜索命令
cgrep C/C++ 源文件 grep -R --include=.[ch] cgrep “memcpy”
jgrep Java/Kotlin 文件 grep -R --include=*.java jgrep “extends Activity”
ggrep Gradle 脚本 grep -R --include=*.gradle ggrep “minSdkVersion”
resgrep res/.xml 资源文件 grep -R --include=res/.xml resgrep “action.MAIN”
mangrep AndroidManifest.xml grep -R --include=AndroidManifest.xml mangrep “permission”
mgrep Makefile 文件 grep -R --include=Makefile mgrep “LOCAL_MODULE”
sepgrep SELinux 策略文件 grep -R --include=*.te sepgrep “allow system_app”
sgrep 所有源代码文件 grep -R --include=. sgrep “TODO”
使用案例:
# 组合搜索
jgrep -n "Log\." --color=always
# 正则表达式搜索
sgrep -P 'interface\s+I\w+\s*{'
# 排除目录搜索
jgrep "onCreate" --exclude-dir=test