设为首页 加入收藏

TOP

Android Makefile 分析之 (build/envsetup.sh)(一)
2014-11-24 07:51:32 来源: 作者: 【 】 浏览:3
Tags:Android Makefile 分析 build/envsetup.sh

build/envsetup.sh 脚本分析(lunch函数)


lunch函数提供了一个菜单,让开发人员选择需要编译的目标产品(target product)和变体(variant),并做一些检查,设置环境变量,并打印出主要的环境变量。


直接运行lunch(必须先运行 build/envsetup.sh,让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


============================================


用户也可以直接输入参数,不使用菜单


============================================


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=$(ech

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java模拟Linux命令grep 下一篇S3C2440嵌入式Linux下网卡DM9000E..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)