每次进入到android source目录后的第一件事恐怕就是先执行. build/envsetup.sh,完成一些命令的初始化,今天主要分析envsetup.sh。
1. 命令-也就是envsetup.sh中的函数
function help() # 显示帮助信息
function get_abs_build_var() # 获取绝对变量
function get_build_var() # 获取绝对变量
function check_product() # 检查product
function check_variant() # 检查变量
function setpaths() # 设置文件路径
function printconfig() # 打印配置
function set_stuff_for_environment() # 设置环境变量
function set_sequence_number() # 设置序号
function settitle() # 设置标题
function choosetype() # 设置type
function chooseproduct() # 设置product
function choosevariant() # 设置variant
function tapas() # 功能同choosecombo
function choosecombo() # 设置编译参数
function add_lunch_combo() # 添加lunch项目
function print_lunch_menu() # 打印lunch列表
function lunch() # 配置lunch
function m() # make from top
function findmakefile() # 查找makefile
function mm() # make from current directory
function mmm() # make the supplied directories
function croot() # 回到根目录
function cproj()
function pid()
function systemstack()
function gdbclient()
function jgrep() # 查找java文件
function cgrep() # 查找c/cpp文件
function resgrep()
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function godir () # 跳到指定目录
# add the default one here
add_lunch_combo generic-eng
# Execute the contents of any vendorsetup.sh files we can find.
for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`
do
echo “including $f”
. $f
done
2. lunch命令
lunch函数提供了一个菜单,让开发人员选择需要编译的目标产品(target product)和变体(variant),并做一些检查,设置环境变量,并打印出主要的环境变量。
直接运行lunch(必须先运行 build/envsetup.sh,让lunch函数驻留到环境变量中)
ning@ning-desktop:~/donut-compare/mydroid$ lunch
You're building on Linux
generic-eng simulator aosp_emulator_us-eng aosp_emulator_eu-eng aosp_dream_us-userdebug aosp_dream_eu-userdebug aosp_dream_us-eng aosp_dream_eu-eng aosp_sapphire_us-userdebug aosp_sapphire_eu-userdebug aosp_sapphire_us-eng aosp_sapphire_eu-eng
Lunch menu... pick a combo:
1. generic-eng
2. simulator
3. aosp_emulator_us-eng
4. aosp_emulator_eu-eng
5. aosp_dream_us-userdebug
6. aosp_dream_eu-userdebug
7. aosp_dream_us-eng
8. aosp_dream_eu-eng
9. aosp_sapphire_us-userdebug
10. aosp_sapphire_eu-userdebug
11. aosp_sapphire_us-eng
12. aosp_sapphire_eu-eng
Which would you like? [generic-eng] 7
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=1.6
TARGET_PRODUCT=aosp_dream_us
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=Donut
============================================
用户也可以直接输入参数,不使用菜单
ning@ning-desktop:~/donut-compare/mydroid$ lunch aosp_dream_us-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=1.6
TARGET_PRODUCT=aosp_dream_us
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=Donut
============================================
下面是lunch函数源代码,用蓝色添加了一下注释,便于阅读:
function lunch()
{
local answer
if [ "$1" ] ; then
# lunch后面直接带参数
answer=$1
else
# lunch后面不带参数,则打印处所有的target product和variant菜单提供用户选择
print_lunch_menu
echo -n "Which would you like? [generic-eng] "
read answer
fi
local selection=
if [ -z "$answer" ]
then
# 如果用户在菜单中没有选择,直接回车,则为系统缺省的generic-eng
selection=generic-eng
elif [ "$answer" = "simulator" ]
then
# 如果是模拟器
selection=simulator
elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")
then
# 如果answer是选择菜单的数字,则获取该数字对应的字符串
if [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]
then
selection=${LUNCH_MENU_CHOICES[$(($answer-$_arrayoffset))]}
fi
# 如果 answer字符串匹配 *-*模式(*的开头不能为-)
elif (echo -n $answer | grep -q -e "^[^\-][^\-]*-[^\-][^\-]*$")
then
selection=$answer
fi
if [ -z "$selection" ]
then
echo
echo "Invalid lunch combo: $answer"
return 1
fi
# special case the simulator
if [ "$selection" = "simulator" ]
then
# 模拟器模式
export TARGET_PRODUCT=sim
export TARGET_BUILD_VARIANT=eng
export TARGET_SIMULATOR=true
export TARGET_BUILD_TYPE=debug
else
# 将 product-variant模式种的product分离出来
local product=$(echo -n $selection | sed -e "s/-.*$//")
# 检查之,调用关系 check_product()->get_build_var()->build/core/config.mk比较罗嗦,不展开了
check_product $product
if [ $? -ne 0 ]
then
echo
echo "** Don't have a product spec for: '$product'"
echo "** Do you have the right repo manifest?"
product=
fi
# 将 product-variant模式种的variant分离出来
local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")
# 检查之,看看是否在 (user userdebug eng) 范围内
check_variant $variant
if [ $? -ne 0 ]
then
echo
echo "** Invalid variant: '$variant'"
echo "** Must be one of ${VARIANT_CHOICES[@]}"
variant=
fi
if [ -z "$product" -o -z "$variant" ]
then
echo
return 1
fi
export TARGET_PRODUCT=$product
export TARGET_BUILD_VARIANT=$variant
export TARGET_SIMULATOR=false
export TARGET_BUILD_TYPE=release
fi # !simulator
echo
# 设置到环境变量,比较多,不再一一列出,最简单的方法 set >env.txt 可获得
set_stuff_for_environment
# 打印一些主要的变量, 调用关系 printconfig()->get_build_var()->build/core/config.mk->build/core/envsetup.mk比较罗嗦,不展开了
printconfig
}
3. choosecombo
官网说明:http://source.android.com/source/building.html
分享到:
相关推荐
Android升级包update.zip的生成过程分析1) 对于update.zip包的制作有两种方式,即手动制作和命令生成... build/envsetup.sh。 ②$ lunch 然后选择你需要的配置(如17)。 ③$ make otapackage。 ....................
# In AOSP topdir## sourcesource build/envsetup.sh## lunchlunch XXXX# to source codecd android_system_service_example# Compilemm使用Android SDK和NDK 系统服务绑定程序API是用于自定义ROM的黑客技术,因此...
$ source build/envsetup.sh cm@cm-System-Product-Name:/R16/android$ $ lunch You're building on Linux Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_x86-eng 3. aosp_mips-eng 4. vbox_x86-eng ...
源构建/envsetup.sh 午餐 aosp_x86_64-eng make -j16 toybox-test 须藤 ln -s $ANDROID_PRODUCT_OUT/system /system /系统/垃圾箱/玩具箱 内容 ./build/core/definitions.mk 覆盖标准构建系统变量以使用我们预...
rootroot@cm-System-Product-Name:/home/wwt/a64/bpi_a64_android/android$ source build/envsetup.sh including device/asus/deb/vendorsetup.sh including device/asus/flo/vendorsetup.sh including device/asus...
安卓系统Ruby现在支持纸杯蛋糕 (Android 1.5) irbapp.apk 包含 libruby.so /sdcard/ruby 中的其他 ... $TOP/build/envsetup.sh$ mm生成的文件 $TOP/out/target/product/generic/system/app/irbapp.apk pseudo irb app
# source build/envsetup.sh # lunch cm_rainbow-eng 回收率 # . build/tools/device/makerecoveries.sh cm_rainbow-eng # mka bootimage 完整构建 # brunch cm_rainbow-eng MTK 关于 mtk 相关二进制文件、...
# source build/envsetup.sh # lunch cm_rainbow-eng 回收率 # . build/tools/device/makerecoveries.sh cm_rainbow-eng # mka bootimage 完整版 # brunch cm_rainbow-eng MTK 关于mtk相关二进制文件,服务和...
Cyanogenmod Arale设备适配此仓库是CM 12中Arale的设备改编版。 我对您的处理方式不承担任何责任。 仅在魅族MX4 ubuntu版本中对此进行了测试。在职的展示触碰方向电池... ./build/envsetup.sh lunch cm_arale-userde
rootroot@cm-System-Product-Name:/home/wwt/uvc_r16_project/android$ source build/envsetup.sh including device/softwinner/bellone-sc3813r/vendorsetup.sh including device/softwinner/astar-evb20/...
rootroot@cm-System-Product-Name:/home/wwt/uvc_r16_project/android$ source build/envsetup.sh including device/softwinner/bellone-sc3813r/vendorsetup.sh including device/softwinner/astar-evb20/...
wenyuanbo@cm-System-Product-Name:/home/wwt/lunch_cb5801_r58/android/device/softwinner/octopus-cb5801$ grep perf . -R 匹配到二进制文件 ./.git/index grep: ./.git/svn: 没有那个文件或目录 ./.git/config: ...
wenyuanbo@cm-System-Product-Name:/home/wwt/lunch_cb5801_r58/android/device/softwinner/octopus-cb5801$ grep perf . -R 匹配到二进制文件 ./.git/index grep: ./.git/svn: 没有那个文件或目录 ./.git/config: ...
cat SC5806.android.aa SC5806.android.ab > r58_android_sc5806_20160811.tar.gz rootroot@rootroot-E400:~/wyb/r58_evb_sc5806$ tar zxvf r58_android_sc5806_20160811.tar.gz tar zxvf SC5806.lichee.tar.gz ...
rootroot@cm-System-Product-Name:/home/wwt/softap_ap6212a0_tinav2.1$ source build/envsetup.sh including target/allwinner/tulip-d1/vendorsetup.sh including target/allwinner/octopus-sch/vendorsetup.sh ...
root@android:/dev # cd /sys/class/i2c-adapter/ root@android:/sys/class/i2c-adapter # ll lrwxrwxrwx root root 1970-01-02 08:31 i2c-0 -> ../../devices/platform/sun5i-i2c.0/i2c-0 lrwxrwxrwx root root ...
build/envsetup.sh lunch To configure and build the library, run make or cd external/ffmpeg-<version>.android; mm; If there is no existing library configuration for a selected product, the ...
wenyuanbo@cm-System-Product-Name:/home/wwt/r58_bma250/android$ source build/envsetup.sh including device/softwinner/kylin-p1/vendorsetup.sh including device/softwinner/octopus-n1/vendorsetup.sh ...
rootroot@rootroot-E400:~/wyb/ap6181+ap6212a0_r16_tinav2.1$ source build/envsetup.sh including target/allwinner/tulip-d1/vendorsetup.sh including target/allwinner/azalea-evb/vendorsetup.sh including ...
r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z 开发板:CB-S 1、(可选修改/调试技巧:) 除了ov5640.c之外,其它的驱动都不编译,节省编译时间!...