• 转build/envsetup.sh


    build/envsetup.sh 脚本分析(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-engLunch 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=RELPLATFORM_VERSION=1.6TARGET_PRODUCT=aosp_dream_usTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=falseTARGET_BUILD_TYPE=releaseTARGET_ARCH=armHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=Donut============================================
    用户也可以直接输入参数,不使用菜单
    ning@ning-desktop:~/donut-compare/mydroid$ lunch aosp_dream_us-eng
    ============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=1.6TARGET_PRODUCT=aosp_dream_usTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=falseTARGET_BUILD_TYPE=releaseTARGET_ARCH=armHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_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}
  • 相关阅读:
    20175322 周弋鸿 2018-2019-2 《Java程序设计》第八周学习总结
    2018-2019-2-20175303 实验二 《Java开发环境的熟悉》实验报告
    20175322 《Java程序设计》第七周学习总结
    20175322 《Java程序设计》第六周学习总结
    2018-2019-2 20175322实验一《Java开发环境的熟悉》实验报告
    20175322《Java程序设计》第五周学习总结
    《Java程序设计》第四周学习总结
    《Java程序设计》第三周学习总结
    《Java程序设计》第二周学习总结
    第一周学习总结
  • 原文地址:https://www.cnblogs.com/sardine/p/2104346.html
Copyright © 2020-2023  润新知