Android编译系统分析之envsetup.sh

本文深入分析Android编译系统中的envsetup.sh脚本,探讨了为何使用cd而非cd,如何定位TOP目录,shell脚本中长命令的多行写法,以及envsetup.sh的主要功能,包括设置croot、lunch、mm等函数,并介绍了lunch的执行过程和正则表达式的应用。
摘要由CSDN通过智能技术生成

已开通新的博客,后续文字都会发到新博客

https://www.0xforee.top


Android 编译系统解析系列文档

编译系统入口envsetup.sh解析

解析lunch的执行过程以及make执行过程中include文件的顺序

关注一些make执行过程中的几个关键点

对一些独特的语法结构进行解析


我们用几个问题来解释这篇文章要讨论的内容

为什么用\cd 而不用cd

在android原代码的提交中,我们发现了这个解释:

Use “\cd” to disable alias temporarily.

使用\cd 来临时屏蔽alias别名

具体作用如下示例:

function mycd()
{
   
    echo "in mycd"
    cd $@
}
alias cd='mycd'

function cproj()
{
   
    pwd
    \cd .. 或者 cd ..
    pwd
}

cproj()

我们执行这个脚本,前者将会打印:

/home/foree/bin
/home/foree

后者将会打印:

/home/foree/bin
in mycd
/home/foree

android 如何定位TOP目录

循环递归,查找build/core/envsetup.mk这个路径下文件是否存在

function gettop
{
   
local TOPFILE=build/core/envsetup.mk
if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then
	# The following circumlocution ensures we remove symlinks from TOP.
	(cd $TOP; PWD= /bin/pwd)
else
	if [ -f $TOPFILE ] ; then
        # The following circumlocution (repeated below as well) ensures
        # that we record the true directory name and not one that is
        # faked up with symlink names.
        PWD= /bin/pwd
	else
        local HERE=$PWD
        T=
        while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
        \cd ..
        T=`PWD= /bin/pwd -P`
        done
        \cd $HERE
        if [ -f "$T/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值