envsetup.sh概要介绍

envsetup.sh概要介绍
function hmm()
作用:
类似帮助文档,介绍关键函数的使用方法,并打印当前文档里的函数

for i in cat $T/build/envsetup.sh | sed -n "/^[[:blank:]]*function /s/function \([a-z_]*\).*/\1/p" | sort | uniq
打印所有的函数名,并以升序排序
sort 排序,默认升序
uniq 去重
sed -n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
/REGEXP/
^ 行首定位符 /^love/ 匹配所有以 love 开头的行
s 用一个字符串替换另一个
[[:blank:]] 空格与制表符

  • 匹配零个或多个前导字符 /love/ 匹配在零个或多个空格紧跟着模式 love 的行
    (…) 保存已匹配的字符
    [a-z_]
    匹配零个或多个小写字母以及_组成的字符串
    .匹配除换行外的单个字符
    \1 子串匹配标记
    p 表示打印行

function build_build_var_cache()
作用:
获取所需的所有构建变量

cached_vars=cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '
打印紧接get_build_var的参数(这句代码中的print也被打印了)
tr tr是个简单的替换命令
? 上 个 命 令 的 退 出 状 态 , 或 函 数 的 返 回 值 。 N F 代 表 是 每 行 的 字 段 数 量   匹 配 操 作 符 (   ) 如 ? 上个命令的退出状态,或函数的返回值。 NF 代表是每行的字段数量 ~ 匹配操作符(~) 如 ?退NF ( ) awk ‘$1 ~/^love/’ test将显示test文件第一列中以love开头的行。

command make --no-print-directory -f build/core/config.mk
执行指定了特定mk file的build/core/config.mk命令
–no-print-directory
禁止“-w”选项,即禁止输出运行makefile之前和之后的信息。

unset build_dicts_script
unset可以取消设置一个shell变量,从内存和shell的导出环境中删除它

eval “$build_dicts_script”
eval命令用于重新运算求出参数的内容,可读取一连串的参数,然后再依参数本身的特性来执行

function destroy_build_var_cache()
取消build_build_var_cache中的构建变量,是build_build_var_cache的destory函数

function get_abs_build_var()
列出make脚本中某变量的值,前缀加上当前路径。
eval echo “${abs_var_cache_$1}”
$1在shell中称为“位置参数”,表示传入的第1个参数(第1个入参)

function get_build_var()
列出make脚本中某变量的值,类似get_abs_build_var,不显示绝对路径

function check_product()
检查指定的TARGET_PRODUCT是否允许,默认的有sim和generic。如果不允许,则输出错误信息,允许则无回显。
get_build_var TARGET_DEVICE > /dev/null
实际上是get_build_var TARGET_DEVICE 1 > /dev/null
默认把标准输出stdout重定向到/dev/null,stderr还是会打印的
示例:
check_product generic

function check_variant()
检查是否是VARIANT_CHOICES变量中的一项
VARIANT_CHOICES=(user userdebug eng)
单小括号 () 用于初始化数组。如:array=(a b c d)

function setpaths()
将编译要用到的一些路径添加到环境变量PATH里
if [ -n “ A N D R O I D B U I L D P A T H S &quot; ] − n 当 串 的 长 度 大 于 0 时 为 真 ( 串 非 空 ) i f [ − d &quot; ANDROID_BUILD_PATHS&quot; ] -n 当串的长度大于0时为真(串非空) if [ -d &quot; ANDROIDBUILDPATHS"]n0()if[d"gccprebuiltdir/$toolchaindir” ]; then
-d filename 如果 filename为目录,则为真
case $(uname -s) in
uname 是Linux命令,用于显示当前操作系统名称
-s 显示系统名。标志缺省为开。

function printconfig()
调用get_build_var report_config输出相关配置信息。

function set_stuff_for_environment()
依次调用settitle, set_java_home,setpaths,set_sequence_number。设置android编译需要的环境变量。

function set_sequence_number()
export BUILD_ENV_SEQUENCE_NUMBER=10,输出BUILD_ENV_SEQUENCE_NUMBER为10

function settitle()
设置shell的prompt提示,PROMPT_COMMAND中加入TARGET_PRODUCT,TARGET_BUILD_VARIANT,和TARGET_BUILD_APPS等信息提示。
if [ -z “$apps” ]; then
-z “STRING” 的长度为零则为真。

export PROMPT_COMMAND="echo -ne “\033]0;[ a r c h − {arch}- arch{product}-${variant}] U S E R @ {USER}@ USER@{HOSTNAME}: ${PWD}\007"”
关于\033]0 ,用来终端显示字体背景和字体颜色,可执行echo -e “\033[0m;123”
使用方法参考https://www.cnblogs.com/knowlegefield/p/7774693.html

function addcompletions()
打印android/sdk/bash_completion/目录下的以.bash结尾的所有文件,并执行此bash
if [ ${BASH_VERSINFO[0]} -lt 3 ];
-lt 小于 less than

function choosetype()
配置环境变量TARGET_BUILD_TYPE。会提示用户选择release或debug。然后调用set_stuff_for_environment等进行设置。
read ANSWER
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

function chooseproduct()
配置环境变量TARGET_PRODUCT。会提示用户选择product。然后调用set_stuff_for_environment设置。

function choosevariant()
配置环境变量TARGET_BUILD_VARIANT。会提示用户选择user或userdebug或eng。
for v in ${VARIANT_CHOICES[@]}
@代表所有参数,这里指(user userdebug eng)

grep -q -e "1[0-9]* &quot; − q 安 静 模 式 , 不 打 印 任 何 标 准 输 出 。 如 果 有 匹 配 的 内 容 则 立 即 返 回 状 态 值 0 , 配 合 i f 使 用 较 好 − e − e , − − r e g e x p = P A T T E R N u s e P A T T E R N f o r m a t c h i n g 表 示 行 首 , &quot; -q 安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0,配合if使用较好 -e -e, --regexp=PATTERN use PATTERN for matching ^表示行首, "q,0if使ee,regexp=PATTERNusePATTERNformatching表示行尾,空行用^$表示

if [ “ A N S W E R &quot; − l e &quot; ANSWER&quot; -le &quot; ANSWER"le"{#VARIANT_CHOICES[@]}” ] ; then
#VARIANT_CHOICES[@] 代表个数
应该加[[ A N S W E R ! = 0 ] ] 把 A N S W E R = 0 的 情 况 排 除 i f [ [ &quot; ANSWER != 0 ]]把ANSWER = 0的情况排除 if [[ &quot; ANSWER!=0]]ANSWER=0if[["ANSWER" -le “${#VARIANT_CHOICES[@]}” ]] && [[ $ANSWER != 0 ]] ;

function choosecombo()
调用choosetype,chooseproduct,choosevariant等函数,确定TARGET_PRODUCT,TARGET_BUILD_TYPE,TARGET_BUILD_VARIANT

function add_lunch_combo()
将产品添加到 LUNCH_MENU_CHOICES 变量里
LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)
在当前基础上添加一个选项

function print_lunch_menu()
打印LUNCH_MENU_CHOICES序号和选项
local i=1 =左右不加空格

function build_tool_and_sign_images()
编辑packimage相关工具并执行packimage.sh命令
if [ ! -e $(get_build_var HOST_OUT_EXECUTABLES)/packimage.sh ]; then
! 逻辑非,条件表达式的相反
-e filename 如果 filename存在,则为真

function lunch()
lunch打印lunch菜单,根据传入参数选项设置TARGET_PRODUCT, TARGET_BUILD_VARIANT和TARGET_BUILD_TYPE
grep -q -e “[-][-]*-[-][^-]*KaTeX parse error: Expected group after '^' at position 15: " 方括号中的^表示排除,[^̲\-]表示一个不是'-'的字符…(echo -n KaTeX parse error: Double superscript at position 25: … | sed -e "s/^[^̲\-]*-//") sed -…(echo -n s e l e c t i o n ∣ s e d − e &quot; s / − . ∗ selection | sed -e &quot;s/-.* selectionsede"s/.//”)
把-及以后的字串替换成空,可以得到userdebug

function _lunch()
COMPREPLY=( ( c o m p g e n − W &quot; (compgen -W &quot; (compgenW"{LUNCH_MENU_CHOICES[]}" – ${cur}) )
自动补全LUNCH_MENU_CHOICES[
]参数complete -F _lunch lunch
为lunch函数指定_lunch的补全方式
比如说lunch sp9860g_2h10_orange-userdebug, 那么敲lunch sp9860g_2h10_o后自动补全就可以了

function tapas()
编译分算apps时的配置
local arch="$(echo KaTeX parse error: Expected 'EOF', got '\grep' at position 23: …gs -n 1 echo | \̲g̲r̲e̲p̲ ̲-E '^(arm|x86|m…’ | xargs)"
$* 传递给脚本或函数的所有参数
xargs 是一条 Unix 和类 Unix 操作系统的常用命令;它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
xargs -n num 后面加次数,表示命令在执行的时候一次用的argument的个数
比如
$ echo “123 abc” | xargs -n 1 echo
123
abc

$ echo “123 abc” | xargs -n 2 echo
123 abc

if [ $(echo $variant | wc -w) -gt 1 ]; then
wc -w
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
-w或–words 显示单词数。

function gettop
获得当前工程的top目录
if [ -n “ T O P &quot; − a − f &quot; TOP&quot; -a -f &quot; TOP"af"TOP/$TOPFILE” ] ; then
-n 当串的长度大于0时为真(串非空)
-a 与
-f filename 如果 filename为常规文件,则为真

while [ ( ! ( -f $TOPFILE ) ) -a ( $PWD != “/” ) ]; do
亦可写成
while [[ ! -f $TOPFILE ]] && [[ $PWD != “/” ]]; do
通过此while循环,不断cd …,直到/根目录
”/“是根目录,”~“是用户home目录

对于
PWD= /bin/pwd
符合
var=string command,其中string为空格,那么执行/bin/pwd命令

function getdriver()
在定义了WITHSTATICANALYZER的情况下,返回用于代码分析工具的一些参数

function m()
可以在代码的任何一个目录里面执行m指令编译所有模块,就是用make的-C选项指定到代码的根目录。
$DRV make -C $T -f build/core/main.mk $@
“-C


“–directory=
指定读取makefile的目录。如果有多个“-C”参数,make的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。如:“make –C ~hchen/test –C prog”等价于“make –C ~hchen/test/prog”。

function findmakefile()
while [ ( ! ( -f $TOPFILE ) ) -a ( KaTeX parse error: Can't use function '\)' in math mode at position 12: PWD != "/" \̲)̲ ]; do 通过此循环不断查…T/Android.mk当前目录下的Android.mk

function mm()
mm指令编译当前目录下的所有模块,如当前目录没有makefile,则调用findmakefile往上查找,如在根目录上则做normal make
单引号’ echo ‘ T ′ 显 示 原 始 内 容 e c h o ′ T&#x27;显示原始内容 echo &#x27; TechoT’
$T

双引号" echo “ T &quot; 显 示 转 义 后 的 内 容 e c h o &quot; T&quot; 显示转义后的内容 echo &quot; T"echo"T”
/home6/android9

local M=echo $M|sed 's:'$T'/::'
可改成
local M=echo $M|sed "s#"$T/"##"

local M=echo $M|sed "s:"$T"/::"

替换/home6/android9/system/bt/Android.mk
T / 的 内 容 为 空 , 此 处 T/的内容为空,此处 T/T/的内容为/home6/android9/
得到local M=system/bt/Android.mk

function mmm()
编译指定路径下的模块
local DASH_ARGS= ( e c h o &quot; (echo &quot; (echo"@" | awk -v RS=" " -v ORS=" " ‘/^-.*$/’)
得到DASH_ARGS,-m之类的
dash破折号
RS是awk读取文件时的行分隔符,ORS则是awk输出时的行结束符。
awk -v
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
/REG/为正则表达式
^指定字段或记录的开头
.表示除了在空白末尾的终端换行字符以外的任何一个字符

local DIRS= ( e c h o &quot; (echo &quot; (echo"@" | awk -v RS=" " -v ORS=" " ‘/[-].*$/’)
[^ String] 在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配
得到目录

MODULES=echo $DIR | sed -n -e 's/.*:\(.*$\)/\1/p' | sed 's/,/ /'
把:结尾的字符分离出来,其中逗号,以空格替换,得到MODULES

DIR=echo $DIR | sed -e 's/:.*//' -e 's:/$::'
-e : sed -e

local MFILE=echo $START | cut -c${TO_CHOP}-
cut -c26- 打印从第26个字符开始到结尾:
例:
echo “abcd” | cut -c3-
cd

function mma()
mma:当前目录新增或删除文件后,可以用mma重新编译。

function mmma()
指定目录下新增或删除文件后,可以用mmma重新编译

function croot()
切换到当前编译环境的根目录。
配合cd -使用效果奇佳
cd - 回到上一个目录

function cproj()
切换到模块包含Android.mk的目录

function qpid()
输出当前qpid
sed -e 1d
1d #删除第一行

function pid()
输出当前pid

function coredump_setup()
通过adb的一系列命令设置coredump

function coredump_enable()
对特定的PID使能core dump

function core()
send SIGV ,把$1指定的PID的进程放到core上

function systemstack()
stacks system_server

function stacks()
if [[ 1 =   [ 0 − 9 ] + 1 =~ ^[0-9]+ 1= [09]+ ]] ; then
=~ a regular expression match of the string
匹配正则表达式
^:匹配行首位置
: 匹 配 行 尾 位 置 [ 0 − 9 ] + :匹配行尾位置 ^[0-9]+ [09]+ 配置以一个或多个数字开头并结尾的字串(即匹配纯数字字串)

function is64bit()
判断PID是否是64bit

function sgrep()
查找文件内容
case uname -s in
Darwin)
Darwin是由苹果电脑于2000年所释出的一个开放原始码操作系统。
例:
shandvm11:~$ uname -s
Linux

find . -name .repo -prune -o -name .git -prune -o -type f -iregex ‘.*.(c|h|cc|cpp|S|java|xml|sh|mk|aidl|vts)’
-exec grep --color -n “$@” {} +
-prune -o 常见用法,排除前面的文件匹配

–color 给匹配到的项着色
-n 加line号

-exec command {} +
This variant of the -exec action runs the specified command on
the selected files, but the command line is built by appending
each selected file name at the end; the total number of invoca‐
tions of the command will be much less than the number of
matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of `{}’
is allowed within the command. The command is executed in the
starting directory.

function gettargetarch
get_build_var TARGET_ARCH

function ggrep()
查找.gradle文件的内容

function jgrep()
查找.java文件的内容

function cgrep()
查找c相关文件的内容

function resgrep()
查找res文件的内容

function mangrep()
查找AndroidManifest.xml文件的内容

function sepgrep()
查找sepolicy

function rcgrep()
查找rc文件的内容

function mgrep()
查找makefile的内容

function treegrep()
查找c|h|cpp|S|java|xml文件内容

function getprebuilt
get_abs_build_var ANDROID_PREBUILTS

function tracedmdump()
dmtracedump功能?

function runhat()
run hat command

function getbugreports()
获取bugreports

function getsdcardpath()
获取sdcard路径

function getlastscreenshot()
获取最后的截屏

function startviewserver()
adb shell service call window 1 i32 $port

function stopviewserver()
adb shell service call window 2

function isviewserverstarted()
adb shell service call window 3

function key_home()
adb shell input keyevent 3

function key_back()
adb shell input keyevent 4

function key_menu()
adb shell input keyevent 82

function smoketest()
do smoke test

function runtest()
("$T"/development/testrunner/runtest.py $@)

function godir ()
先创建一个filelist,去查找指定的字符串,提示选择序号,进入指定文件夹
find . -wholename ./out -prune -o -wholename ./.repo -prune -o -type f > $FILELIST
-wholename用于带/的路径

sed -e ‘s//[^/]*$//’
把最后一个/及以后的内容替换成空,例
a/b/c
a/b

function set_java_home()
设置JAVA_HOME

function pez
# Print colored exit condition

function get_make_command()
echo command make

function make()
执行command make,打印相关信息,之所以加command是因为有函数命名为make,这样可以执行默认的gnu make命令

function provision()
A N D R O I D P R O D U C T O U T / p r o v i s i o n − d e v i c e &quot; &quot; ANDROID_PRODUCT_OUT/provision-device&quot; &quot; ANDROIDPRODUCTOUT/provisiondevice""@”

shift 1
shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理


  1. 0-9 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值