编译之前我们一般都怎么做?
我们在编译android之前,通常会输入一些命令,比如:
. ./bulid/envsetup.sh
...
lunch
...
make
...
这里的envsetup.sh就是设置android的编译环境,初始化各种变量,比如设备类型什么的,下面是我在我的板子上执行上述命令的结果:
mic@micpc:~/work/android4.0.4$ . ./build/envsetup.sh
including device/moto/stingray/vendorsetup.sh
including device/moto/wingray/vendorsetup.sh
including device/samsung/smdk4x12/vendorsetup.sh
including sdk/bash_completion/adb.bash
##这里看到,加载envsetup.sh后会加载device目录下其他的一些vendorsetup.sh过来。
##另外adb.bash是什么?我也不清楚,看看老罗怎么说。
##“在sdk/bash_completion目录下的adb.bash文件也会加载到当前终端来,它是用来实现adb命令的bash completion功能的。
##也就是说,加载了该文件之后,我们在运行adb相关的命令的时候,通过按tab键就可以帮助我们自动完成命令的输入”
#然后我们又执行了lunch命令,这个命令是在envsetup.sh中实现的。
mic@micpc:~/work/android4.0.4$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. full-eng
2. full_x86-eng
3. vbox_x86-eng
4. full_stingray-userdebug
5. full_wingray-userdebug
6. full_smdk4x12-userdebug
7. full_smdk4x12-eng
Which would you like? [full-eng] 6
##可以看到,终端输出了一个菜单,并让我们选择一个选项,我选择的是6,然后就会打印出如下信息,这些变量就是我们编译前要设置好到系统变量。通过这些变量,
##我们就配置好了android的编译环境。
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.4
TARGET_PRODUCT=full_smdk4x12
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=IMM76D
============================================
envsetup.sh干啥用?
/bulid/envsetup.sh这个脚本中实现了很多功能函数,上面的lunch,还有m,mm,mmm等。
加载vendorsetup.sh,添加lunch
在envsetup.sh脚本的最后面有一段,
# Execute the contents of any vendorsetup.sh files we can find.
for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/*/vendorsetup.sh device/*/*/vendorsetup.sh 2> /dev/null`
do
echo "including $f"
. $f
done
unset f
它的作用是遍历 vendor目录和device目录下的vendorsetup.sh,
1.通过echo把这个vnedorsetup.sh打印出来,就是我们前面看到的"