教程都是先执行这个
source ./build/envsetup.sh
lunch WW_Tinker_Board_2-userdebug
./build.sh
备注:build.sh代码第一行会自动source /build/envsetup.sh 因为lunch是在envsetup.sh中定义所以第一次不能省略source ./build/envsetup.sh
envsetup.sh
这个envsetup.sh中定义了很多环境设置环境变量的工具和函数
包含lunch mmm等函数
lunch WW_Tinker_Board_2-userdebug lunch的代码
function lunch()
{
local answer
if [ "$1" ] ; then
answer=$1
else
print_lunch_menu
echo -n "Which would you like? [aosp_arm-eng] "
read answer
fi
local selection=
if [ -z "$answer" ]
then
selection=aosp_arm-eng
elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")
then
local choices=($(TARGET_BUILD_APPS= get_build_var COMMON_LUNCH_CHOICES))
if [ $answer -le ${#choices[@]} ]
then
# array in zsh starts from 1 instead of 0.
if [ -n "$ZSH_VERSION" ]
then
selection=${choices[$(($answer))]}
else
selection=${choices[$(($answer-1))]}
fi
fi
else
selection=$answer
fi
export TARGET_BUILD_APPS=
local product variant_and_version variant version
product=${selection%%-*} # Trim everything after first dash
variant_and_version=${selection#*-} # Trim everything up to first dash
if [ "$variant_and_version" != "$selection" ]; then
variant=${variant_and_version%%-*}
if [ "$variant" != "$variant_and_version" ]; then
version=${variant_and_version#*-}
fi
fi
if [ -z "$product" ]
then
echo
echo "Invalid lunch combo: $selection"
return 1
fi
TARGET_PRODUCT=$product \
TARGET_BUILD_VARIANT=$variant \
TARGET_PLATFORM_VERSION=$version \
build_build_var_cache
if [ $? -ne 0 ]
then
return 1
fi
export TARGET_PRODUCT=$(get_build_var TARGET_PRODUCT)
export TARGET_BUILD_VARIANT=$(get_build_var TARGET_BUILD_VARIANT)
if [ -n "$version" ]; then
export TARGET_PLATFORM_VERSION=$(get_build_var TARGET_PLATFORM_VERSION)
else
unset TARGET_PLATFORM_VERSION
fi
export TARGET_BUILD_TYPE=release
echo
set_stuff_for_environment
printconfig
destroy_build_var_cache
}
lunch看起来就是根据给定的参数定义 三个环境变量
TARGET_PRODUCT=$product \
TARGET_BUILD_VARIANT=$variant \
TARGET_PLATFORM_VERSION=$version \
问题:参数传进来再哪里用 如果build.sh没有直接调用 要找到在哪调用了
全局搜索示例传入的参数获取一些信息 后再分析build.sh
竟然后26个文件7000多出有 写死的WW_Tinker_Board_2 的定义 看似不合理
应该是替换的原版android的某个名称 达到自定义名称的目的 否则这么一个一开始就需要全局引入的参数 应该是用变量实现 全局环境变量都有了 应该是调用 当然为这个配置项写死的配置应该很多 那应该以文件为单位 不应该出现一个文件多出该变量定义
build.sh
发现build.sh脚本中依然有写死的WW_Tinker_Board_2
usage()
{
echo "USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME] [-n BUILD_NUMBER]"
echo "No ARGS means use default build option "
echo "WHERE: -U = build uboot "
echo " -C = build kernel with Clang "
echo " -K = build kernel "
echo " -A = build android "
echo " -p = will build packaging in IMAGE "
echo " -o = build OTA package "
echo " -u = build update.img "
echo " -v = build android with 'user' or 'userdebug' "
echo " -n = set build number "
echo " -r = pack the release "
echo " -d = huild kernel dts name "
echo " -V = build version "
echo " -J = build jobs "
exit 1
}
支持的参数 不用解释 看说明就行
source build/envsetup.sh >/dev/null
BUILD_UBOOT=false
BUILD_KERNEL_WITH_CLANG=false
BUILD_KERNEL=false
BUILD_ANDROID=false
BUILD_AB_IMAGE=false
BUILD_UPDATE_IMG=false
BUILD_OTA=false
BUILD_PACKING=false
BUILD_VARIANT=`get_build_var TARGET_BUILD_VARIANT`
KERNEL_DTS=""
#BUILD_VERSION=""
BUILD_JOBS=16
PACK_RELEASE=false
BUILD_NUMBER="eng"-"$USER"-"$(date +%Y%m%d.%H%M)"
RELEASE_NAME=Tinker_Board_2-Android11-"$BUILD_NUMBER"