此脚本文件主要是在编译模块前用来加载编译过程中用到的命令、环境变量,包括一些基本函数,配置编译工具和路径,查找一些vendorsetup.sh文件并执行
function setpaths()
function m()
function mm()
function mmm()
function lunch()
function jgrep()
function cgrep()
function resgrep()
一、初始化编译环境
1、在根目录下执行source build/envsetup.sh
2、选择一个编译项lunch
,列举一项,此项编译成eng版本
full_rlk6735_65t_c_m0-eng
full表示目标设备为Android的模拟器,官方解释为:fully configured with all languages,apps, input methods,全部的应用程序及语言,输入法等。后半部分eng表示带有调试功能的工程机。rlk6735_65t_c_m0是目标产品名字(target product),eng是编译类型(variant)。
3、编译单独模块mmm packages/apps/Dialer/
二、编译命令(要有Android.mk文件)
m 在当前代码树的顶层路径执行make命令,不管哪层路径都可以执行此命令
function m()
{
local T=$(gettop)
local DRV=$(getdriver $T)
if [ "$T" ]; then
$DRV make -C $T -f build/core/main.mk $@
else
echo "Couldn't locate the top of the tree. Try setting TOP."
return 1
fi
}
mm 在当前路径下执行make命令,当前路径如果是顶层,相当于全编,不包括它们的依赖文件
mmm 编译指定路径的全部文件,不包括它们的依赖文件(mmm packages/apps/Dialer/),用Tab键可以补全路径名称。
如果修改了资源文件,要加参数-B强制编译
mmm -B packages/apps/Dialer/
如果要单独编译某个模块
mmm packages/apps/Dialer:Dialer
不论采用何种编译方式,编译成功后都有如下类似日志
Install: out/target/product/rlk6580_we_c_m/system/priv-app/Dialer/Dialer.apk
建议使用mmm方式分模块编译,如果使用mm方式编译,就会删除system.img、ramdisk.img、userdata.img等IMG镜像文件,之后还用重新编译全部代码生成这些文件,非常耗时。
三、linux grep命令
grep:Global Regular Expression Print,表示全局正则表达式版本,用来进行文本搜索
jgrep:在java文件进行文本搜索
function jgrep()
{
find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.java" -print0 | xargs -0 grep --color -n "$@"
}
cgrep:在c/cpp/cc/h/hpp文件进行文本搜索
resgrep:在xml文件进行文本搜索,例如resgrep 'xxx'
或者resgrep "xxx"