已开通新的博客,后续文字都会发到新博客
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/