|
@@ -0,0 +1,545 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+#/////////////////////////////////////////////////////////////////#
|
|
|
+#////// 其他变量定义,全大写 //////#
|
|
|
+# 工作空间目录;
|
|
|
+WORK_DIR=$(pwd)
|
|
|
+echo "$WORK_DIR"
|
|
|
+# Android目录;
|
|
|
+ANDROID_DIR=${WORK_DIR}"/kernel/android/R"
|
|
|
+# 配置文件;
|
|
|
+PROJECT_NAME="CASPER.cfg"
|
|
|
+# Dailybuild输出目录;
|
|
|
+RTK_DAILYBUILD_OUTPUT_PATH=${WORK_DIR}"/kernel/system/tmp/dailybuild_output"
|
|
|
+# Key目录;
|
|
|
+KEY_OPTION=${ANDROID_DIR}"/device/tv051/R3/Releasekeys"
|
|
|
+# 是否增量编译OTA包(Incremental Compilation OTA),只用于Arg_BuildMark=1时,即Dailybuild才需要;
|
|
|
+# 星期四:全量编译OTA;
|
|
|
+# 星期五:增量编译OTA;
|
|
|
+IC_OTA=false
|
|
|
+# SVN路径;
|
|
|
+SCBC_APPS_SVN_SRC_APK=https://odm-design-center-hz.tclking.com/svn/scbc_apps/trunk/app/apk
|
|
|
+# 重定向输出日志;
|
|
|
+REDIRECT_LOG=false
|
|
|
+# 日志文件;
|
|
|
+LOG_FILE=${WORK_DIR}/Target/build.log
|
|
|
+# 是否编译中间件;
|
|
|
+export TV_MIDWARE_MAKE=false
|
|
|
+# 是否安装RTK的APP,即RTK公版;
|
|
|
+export RTK_TV_APK_INSTALL=false
|
|
|
+# 是否开启远场语音;
|
|
|
+# export Argument_FarfieldVoice=true
|
|
|
+# 版本号;
|
|
|
+export SCBC_PRODUCT_VERSION="V8-T841AGL-LF1V001"
|
|
|
+#/////////////////////////////////////////////////////////////////#
|
|
|
+
|
|
|
+# 获取参数个数使用: $#
|
|
|
+echo "外部参数个数="$#
|
|
|
+
|
|
|
+# 定义外部参数,命名要求:匈牙利命名,带前缀Arg_.
|
|
|
+# 每个参数意义,需要明确说明,请参照以下方式添加新参数;
|
|
|
+#/////////////////////////////////////////////////////////////////#
|
|
|
+# 外部参数定义: 字符串类型、布尔类型、数字类型;
|
|
|
+Arg_CodeSync=true # 是否需要更新代码;
|
|
|
+Arg_BuildRelease='' # 编译的Img类型:2=Debug、1=Release(CTS\user);
|
|
|
+Arg_BuildOTA=false # 是否编译OTA包;
|
|
|
+Arg_VersionNum='' # 编译版本号;
|
|
|
+Arg_CleanBuild=false # 是否Clean编译;
|
|
|
+Arg_BrandName='' # 编译的品牌名称;
|
|
|
+Arg_FarfieldVoice=true # 是否开启远场语音;
|
|
|
+Arg_MakeTVMidware=false # 是否编译TVMidware
|
|
|
+Arg_InstallRTKAPK=false # 是否安装RTK APK,即RTK公版;
|
|
|
+Arg_BuildMark=0 # 编译类型:给一个编译标志,用于区分某些编译的不同,如1=Dailybuild, 0=普通编译;
|
|
|
+#/////////////////////////////////////////////////////////////////#
|
|
|
+
|
|
|
+# 解析外部参数;
|
|
|
+parseArgument()
|
|
|
+{
|
|
|
+ echo "func=parseArgument"
|
|
|
+ # 遍历参数;
|
|
|
+ for arg in $*
|
|
|
+ do
|
|
|
+ if [[ $arg == *'='* ]];then
|
|
|
+ # 获取参数值;
|
|
|
+ key=${arg%%=*}
|
|
|
+ val=${arg#*=}
|
|
|
+ echo -e $arg "\t\t\t取等号左边值:"${key} "\t\t\t取等号右边值:"${val}
|
|
|
+
|
|
|
+ # 新增外部参数时,请依次添加;
|
|
|
+ if [ ${key} = 'Arg_BuildRelease' ];then
|
|
|
+ Arg_BuildRelease=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_BuildOTA' ];then
|
|
|
+ Arg_BuildOTA=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_VersionNum' ];then
|
|
|
+ Arg_VersionNum=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_CleanBuild' ];then
|
|
|
+ Arg_CleanBuild=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_BrandName' ];then
|
|
|
+ Arg_BrandName=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_FarfieldVoice' ];then
|
|
|
+ Arg_FarfieldVoice=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_MakeTVMidware' ];then
|
|
|
+ Arg_MakeTVMidware=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_InstallRTKAPK' ];then
|
|
|
+ Arg_InstallRTKAPK=${val}
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${key} = 'Arg_BuildMark' ];then
|
|
|
+ Arg_BuildMark=${val}
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ done
|
|
|
+
|
|
|
+ REDIRECT_LOG=true
|
|
|
+}
|
|
|
+
|
|
|
+# 用户手动选择参数进行编译;
|
|
|
+manualArgument()
|
|
|
+{
|
|
|
+ echo "==================================================================================="
|
|
|
+ echo "默认客户版本号:V8-T851MGL-LF1V001"
|
|
|
+ echo "==================================================================================="
|
|
|
+ echo "请输入版本号[Please type version]"
|
|
|
+ read -p "[V8-T841AGL-LF1V001]" Arg_VersionNum
|
|
|
+ echo "CTS or not?"
|
|
|
+ read -p "[1-CTS 2-Debug ]" Arg_BuildRelease
|
|
|
+ echo "Build OTA package or not?"
|
|
|
+ read -p "[y/n]" Arg_BuildOTA
|
|
|
+ echo "是否启用远场语音[n/y]?"
|
|
|
+ read -p "[n/y]" Arg_FarfieldVoice
|
|
|
+ echo "Clean or not?"
|
|
|
+ read -p "[n/y]" Arg_CleanBuild
|
|
|
+ echo "是否编译中间件"
|
|
|
+ read -p "[n/y]" Arg_MakeTVMidware
|
|
|
+ echo "是否编译RTK公版?"
|
|
|
+ read -p "[n/y]" Arg_InstallRTKAPK
|
|
|
+ read -p "编译标志位
|
|
|
+ [
|
|
|
+ 0-Normal(defualt) 1-Dailybuild
|
|
|
+ ] " Arg_BuildMark
|
|
|
+}
|
|
|
+
|
|
|
+# 初始化参数;
|
|
|
+initArgument()
|
|
|
+{
|
|
|
+ # 删除上一次的编译文件;
|
|
|
+ rm -rf ${WORK_DIR}/Target
|
|
|
+ mkdir ${WORK_DIR}/Target
|
|
|
+
|
|
|
+ # 当REDIRECT_LOG=true时,重定向输出;
|
|
|
+ if [ ${REDIRECT_LOG} = true ]; then
|
|
|
+ if [ -f ${LOG_FILE} ]; then
|
|
|
+ rm -f ${LOG_FILE}
|
|
|
+ fi
|
|
|
+ # 重定向Log到文件中;
|
|
|
+ exec 1>>${LOG_FILE}
|
|
|
+ exec 2>>${LOG_FILE}
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 用户不给版本号,设置默认值;
|
|
|
+ if [ x$Arg_VersionNum = "x" ];then
|
|
|
+ Arg_VersionNum=V8-T841AGL-LF1V001
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 远场语音设置:用户选择n不开启,否则不选或y都为开启;
|
|
|
+ if [ x$Arg_FarfieldVoice = "xn" ]; then
|
|
|
+ Arg_FarfieldVoice=false
|
|
|
+ else
|
|
|
+ Arg_FarfieldVoice=true
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 用户不选择OTA编译,则默认为false;
|
|
|
+ if [ x$Arg_BuildOTA = "x" ]; then
|
|
|
+ Arg_BuildOTA=false
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Clean编译:用户手动选择,则true,否则不选或n都为关闭;
|
|
|
+ if [ x$Arg_CleanBuild = "xy" ]; then
|
|
|
+ Arg_CleanBuild=true
|
|
|
+ else
|
|
|
+ Arg_CleanBuild=false
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 编译类型:用户不选择则默认user(CTS);
|
|
|
+ if [ x$Arg_BuildRelease = "x" ]; then
|
|
|
+ Arg_BuildRelease=1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 将字串小写比较;
|
|
|
+ if [ x${Arg_BuildRelease,} = "xdebug" ]; then
|
|
|
+ Arg_BuildRelease=2
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ x${Arg_BuildRelease,} = "xrelease" ]; then
|
|
|
+ Arg_BuildRelease=1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 编译中间件,默认false;
|
|
|
+ if [ x$Arg_MakeTVMidware = "xy" ]; then
|
|
|
+ Arg_MakeTVMidware=true
|
|
|
+ else
|
|
|
+ Arg_MakeTVMidware=false
|
|
|
+ fi
|
|
|
+
|
|
|
+ # rtk公版;
|
|
|
+ if [ x$Arg_InstallRTKAPK = "xy" ]; then
|
|
|
+ Arg_InstallRTKAPK=true
|
|
|
+ # RTK公版不能编译中间件;
|
|
|
+ Arg_MakeTVMidware=false
|
|
|
+ else
|
|
|
+ Arg_InstallRTKAPK=false
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Arg_BuildMark,无选或大于范围的值默认为Normal编译;
|
|
|
+ if [ x$Arg_BuildMark = "x" ] || [ $Arg_BuildMark -gt 1 ]; then
|
|
|
+ Arg_BuildMark=0
|
|
|
+ fi
|
|
|
+
|
|
|
+ #export TV_MIDWARE_MAKE=${Arg_MakeTVMidware}
|
|
|
+ export SCBC_PRODUCT_VERSION=${Arg_VersionNum}
|
|
|
+ export RTK_TV_APK_INSTALL=${Arg_InstallRTKAPK}
|
|
|
+ # export Argument_FarfieldVoice=${Arg_FarfieldVoice}
|
|
|
+ echo "==================================================================================="
|
|
|
+ echo "SCBC_PRODUCT_VERSION: ${SCBC_PRODUCT_VERSION}"
|
|
|
+ echo "RTK_TV_APK_INSTALL: ${Arg_InstallRTKAPK}"
|
|
|
+ # echo "Arg_FarfieldVoice: ${Arg_FarfieldVoice}"
|
|
|
+ echo "Arg_BuildOTA: ${Arg_BuildOTA}"
|
|
|
+ echo "Arg_CleanBuild: ${Arg_CleanBuild}"
|
|
|
+ echo "==================================================================================="
|
|
|
+ echo "软件版本(version): ${Arg_VersionNum} "
|
|
|
+ echo "CTS版本编译: ${Arg_BuildRelease} "
|
|
|
+ #echo "TV_MIDWARE_MAKE: ${Arg_MakeTVMidware} "
|
|
|
+ echo "Arg_InstallRTKAPK: ${Arg_InstallRTKAPK} "
|
|
|
+ echo "Arg_BuildMark: ${Arg_BuildMark} "
|
|
|
+ echo "==================================================================================="
|
|
|
+}
|
|
|
+
|
|
|
+pre_build()
|
|
|
+{
|
|
|
+ HEAD_VERSION=`svn info $SCBC_APPS_SVN_SRC_APK|grep Revision|cut -d' ' -f2`
|
|
|
+ if [ -z "$HEAD_VERSION" ]; then
|
|
|
+ echo "HEAD_VERSION is empty 退出编译"
|
|
|
+ exit;
|
|
|
+ fi
|
|
|
+
|
|
|
+ cd ${WORK_DIR}
|
|
|
+ ./kernel/android/R/device/tv051/R3/update_debug_apps.sh
|
|
|
+ ./kernel/android/R/device/tv051/R3/save_apps_svn.sh
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+build_img()
|
|
|
+{
|
|
|
+ rm -rf ${ANDROID_DIR}/signed-target_files.zip
|
|
|
+ rm -rf ${ANDROID_DIR}/signed-ota_update.zip
|
|
|
+ rm -rf ${WORK_DIR}/image_creator/*.img
|
|
|
+ rm -rf ${WORK_DIR}/kernel/system/tmp/dailybuild_output
|
|
|
+
|
|
|
+ if [ ${Arg_BuildRelease} -eq 1 ];then
|
|
|
+ COMPILEMODE="CASPER-user"
|
|
|
+ else
|
|
|
+ COMPILEMODE="CASPER-userdebug"
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ ${Arg_CleanBuild} = true ];then
|
|
|
+ make_img_clean
|
|
|
+ else
|
|
|
+ make_img_noclean
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+#报错退出
|
|
|
+make_error_exit()
|
|
|
+{
|
|
|
+ if [ "$(echo $?)" != "0" ]; then
|
|
|
+ echo "There is a error , The compiler is fail !!!!"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+#编译kernel
|
|
|
+make_kernel()
|
|
|
+{
|
|
|
+ echo "Start make linux kernel"
|
|
|
+ #./build_android.sh [-p project_name] [-c y/n] [-v Build_variant] [-d device_name] {-j job} {-k key_path}
|
|
|
+ cd ${WORK_DIR}/kernel/system
|
|
|
+ #./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 12 -k $KEY_OPTION -V n
|
|
|
+ make_error_exit
|
|
|
+ echo "make linux kernel succeed"
|
|
|
+}
|
|
|
+
|
|
|
+#编译kernel and Android
|
|
|
+make_img_clean()
|
|
|
+{
|
|
|
+ echo "make_img_clean"
|
|
|
+ cd ${WORK_DIR}/kernel/system
|
|
|
+ case $COMPILEMODE in
|
|
|
+ user)
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ if [ $Arg_BuildOTA = true ];then
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
|
|
|
+ else
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c y -v $COMPILEMODE -j 8 -o y
|
|
|
+ fi
|
|
|
+ make_error_exit
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ cd ${WORK_DIR}/image_creator
|
|
|
+ python create_rtk_image.py --profile=CASPER_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
|
|
|
+
|
|
|
+ make_error_exit
|
|
|
+}
|
|
|
+
|
|
|
+#编译kernel and Android noclean
|
|
|
+make_img_noclean()
|
|
|
+{
|
|
|
+ echo "make_img_noclean"
|
|
|
+ cd ${WORK_DIR}/kernel/system
|
|
|
+ #./build_android.sh [-p project_name] [-c y/n] [-v Build_variant] [-d device_name] {-j job} {-k key_path}
|
|
|
+ #./build_android.sh -p CASPER.cfg -c n -v userdebug -j 8
|
|
|
+ case $COMPILEMODE in
|
|
|
+ user)
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
|
|
|
+ make_error_exit
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ if [ $Arg_BuildOTA = true ];then
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -k $KEY_OPTION -o y
|
|
|
+ else
|
|
|
+ ./build_android.sh -p $PROJECT_NAME -c n -v $COMPILEMODE -j 8 -o y
|
|
|
+ fi
|
|
|
+ make_error_exit
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ cd ${WORK_DIR}/image_creator
|
|
|
+ python create_rtk_image.py --profile=CASPER_allpackage.cfg --bootcode=n --outfile=install_wipe.img --clean_factory=n
|
|
|
+
|
|
|
+ make_error_exit
|
|
|
+}
|
|
|
+
|
|
|
+# 复制结果(同时需要处理OTA增量编译);
|
|
|
+copy_file()
|
|
|
+{
|
|
|
+ if [ $Arg_BuildRelease -eq 1 ];then
|
|
|
+ OutputDir="${Arg_VersionNum}"-CTS
|
|
|
+ else
|
|
|
+ OutputDir=${Arg_VersionNum}
|
|
|
+ fi
|
|
|
+
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/BOOT
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/OTA
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/USB
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/WIPE
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/Write
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/Reports
|
|
|
+ mkdir -p ${WORK_DIR}/Target/${OutputDir}/OTA/IncrementalOTA
|
|
|
+
|
|
|
+ if [ $Arg_BuildRelease -eq 1 ];then
|
|
|
+ cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
|
|
|
+ cp install_user_2K_RTD28XOB8_A1_TV051_R3_2K.img ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img > ${WORK_DIR}/Target/${OutputDir}/USB/MD5.txt
|
|
|
+
|
|
|
+ cp -f ${ANDROID_DIR}/signed-target_files.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip
|
|
|
+ cp -f ${ANDROID_DIR}/signed-ota_update.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_target_files.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_ota_update.zip.txt
|
|
|
+ else
|
|
|
+ cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
|
|
|
+ cp install_userdebug_2K_RTD28XOB8_A1_TV051_R3_2K.img ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/USB/${OutputDir}.img > ${WORK_DIR}/Target/${OutputDir}/USB/MD5.txt
|
|
|
+
|
|
|
+ if [ $Arg_BuildOTA = true ];then
|
|
|
+ cp -f ${ANDROID_DIR}/signed-target_files.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip
|
|
|
+ cp -f ${ANDROID_DIR}/signed-ota_update.zip ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-ota_update.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_ota_update.zip.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/OTA/"${OutputDir}"-target_files.zip > ${WORK_DIR}/Target/${OutputDir}/OTA/MD5_target_files.txt
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ cp -f ${ANDROID_DIR}/out/target/product/R3/system/build.prop ${WORK_DIR}/Target/${OutputDir}/USB/
|
|
|
+ cd ${WORK_DIR}/kernel/android/R/vendor/realtek/tool/image_file_creator
|
|
|
+ cp install_wipe.img ${WORK_DIR}/Target/${OutputDir}/WIPE/"${OutputDir}"-wipe.img
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/WIPE/*.img > ${WORK_DIR}/Target/${OutputDir}/WIPE/MD5_WIPE.txt
|
|
|
+ cp -f ${WORK_DIR}//kernel/fw/bootcode/RTD28XOB8_A1_TV051_R3_2K/* ${WORK_DIR}/Target/${OutputDir}/BOOT/
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootcode_for_rtice.bin > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootcode_for_rtice.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootloader.img > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootloader_img.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/bootloader.pkg > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_bootloader_pkg.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/dvrboot.exe.bin > ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_dvrboot.exe.txt
|
|
|
+ md5sum ${WORK_DIR}/Target/${OutputDir}/BOOT/dvrboot.rescue.exe.bin> ${WORK_DIR}/Target/${OutputDir}/BOOT/MD5_dvrboot_rescue_exe.txt
|
|
|
+
|
|
|
+ # 处理Dailybuild 增量编译;
|
|
|
+ if [ $Arg_BuildMark -eq 1 ]; then
|
|
|
+ # 获取周几:0~6 星期天~星期六
|
|
|
+ week=$(date +%w)
|
|
|
+ # 周五:增量编译OTA,需要保存周四的全量包;
|
|
|
+ if [ ${week} -eq 4 ]; then
|
|
|
+ day=$(date +%m%d)
|
|
|
+ echo "保存周四全量编译OTA包,用于周五增量编译OTA" # /home/exchange/Dailybuild/ 该目录必须存在且有权限;
|
|
|
+ cp -r ${WORK_DIR}/Target/${OutputDir}/OTA/*-target_files.zip /home/exchange/Dailybuild/RTK2841A_OTA_$day/
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# 保存apk;
|
|
|
+save_apk_svn()
|
|
|
+{
|
|
|
+ cp ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/save_apk_svn ${WORK_DIR}/Target/${OutputDir}/Reports
|
|
|
+}
|
|
|
+
|
|
|
+# 保存版本号文件;
|
|
|
+save_version_number()
|
|
|
+{
|
|
|
+ var_d=$(date '+%Y%m%d%H')
|
|
|
+ version_number="${Arg_VersionNum}"_"$var_d"
|
|
|
+ cd ${WORK_DIR}
|
|
|
+ repo manifest -r -o ./$version_number.xml
|
|
|
+ cp -r ${WORK_DIR}/$version_number.xml ${WORK_DIR}/Target/${OutputDir}/Reports/
|
|
|
+ rm ${WORK_DIR}/$version_number.xml
|
|
|
+}
|
|
|
+
|
|
|
+getold()
|
|
|
+{
|
|
|
+ cd ${WORK_DIR}/OTA/old/
|
|
|
+ files=$(ls $path)
|
|
|
+ A=".zip";
|
|
|
+ for filename1 in $files
|
|
|
+ do
|
|
|
+ if [[ $filename1 == *$A* ]] ; then
|
|
|
+ echo $filename1
|
|
|
+ fi
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+getnew()
|
|
|
+{
|
|
|
+ cd ${WORK_DIR}/OTA/new/
|
|
|
+ files=$(ls $path)
|
|
|
+ B=".zip";
|
|
|
+ for filename2 in $files
|
|
|
+ do
|
|
|
+ if [[ $filename2 == *$B* ]] ; then
|
|
|
+ echo $filename2
|
|
|
+ fi
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+makeota_diff()
|
|
|
+{
|
|
|
+ otaname="51M"_"$filename1"_"$filename2"
|
|
|
+ cd ${ANDROID_DIR}
|
|
|
+ ./build/tools/releasetools/ota_from_target_files --signapk_path ${ANDROID_DIR}/out/host/linux-x86/framework/signapk.jar --signapk_shared_library_path ${ANDROID_DIR}/out/host/linux-x86/lib64 -i ${WORK_DIR}/OTA/old/$filename1 ${WORK_DIR}/OTA/new/$filename2 ${WORK_DIR}/OTA/IncrementalOTA/$otaname.zip
|
|
|
+ md5sum ${WORK_DIR}/OTA/IncrementalOTA/$otaname.zip > ${WORK_DIR}/OTA/IncrementalOTA/MD5_incrementalOTA.txt
|
|
|
+}
|
|
|
+
|
|
|
+make_incrementalOTA()
|
|
|
+{
|
|
|
+ yesterday=$(date -d"-1 day" +%m%d )
|
|
|
+ cp -r /home/exchange/Dailybuild/RTK2841A_OTA_$yesterday/*-target_files.zip ${WORK_DIR}/OTA/old/
|
|
|
+ cp -r ${WORK_DIR}/Target/${OutputDir}/OTA/*-target_files.zip ${WORK_DIR}/OTA/new/
|
|
|
+ cd ${ANDROID_DIR}
|
|
|
+ source build/envsetup.sh
|
|
|
+ lunch NOKIA-userdebug
|
|
|
+ getnew
|
|
|
+ getold
|
|
|
+ makeota_diff
|
|
|
+ cp -r ${WORK_DIR}/OTA/IncrementalOTA/ ${WORK_DIR}/Target/${OutputDir}/OTA
|
|
|
+}
|
|
|
+
|
|
|
+EnableFarfieldVoice()
|
|
|
+{
|
|
|
+ if [ ${Arg_FarfieldVoice} == true ]; then
|
|
|
+ echo "开启远场语音"
|
|
|
+ cd ${ANDROID_DIR}/device/tv051/R3/
|
|
|
+ findstr=' device\/tv051\/R3\/etc\/permissions\/privapp-permissions-rtk.xml:system_ext\/etc\/permissions\/privapp-permissions-rtk.xml \\'
|
|
|
+ newline=' device/tv051/R3/etc/permissions/echo_reference.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/echo_reference.xml \\'
|
|
|
+ sed -i "/^$findstr/a\\$newline" device.mk
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+commitMidware()
|
|
|
+{
|
|
|
+ Arg_MakeTVMidware=false # 41A不需要编译中间件;
|
|
|
+ if [ $Arg_MakeTVMidware = true ]; then
|
|
|
+ cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/TVMidwareManager || exit
|
|
|
+ midware_revision=$(svn info --show-item last-changed-revision)
|
|
|
+ cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/tvmidware/ || exit
|
|
|
+ readme_midware_revision=$(sed -n '/revision/p' readme.txt | awk -F '=' '{print $2}')
|
|
|
+ if [ $midware_revision -gt $readme_midware_revision ]; then
|
|
|
+ cp -f ${ANDROID_DIR}/out/target/product/R3/system_ext/framework/tv-midware-manager.jar ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/tv-midware-manager.jar
|
|
|
+ cp -f ${ANDROID_DIR}/out/target/product/R3/system_ext/framework/oat/arm/tv-midware-manager.odex ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/oat/arm/tv-midware-manager.odex
|
|
|
+ cp -f ${ANDROID_DIR}/out/target/product/R3/system_ext/framework/oat/arm/tv-midware-manager.vdex ${ANDROID_DIR}/vendor/tv051/app/prebuilt_app/tvmidware/oat/arm/tv-midware-manager.vdex
|
|
|
+ cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/tvmidware || exit
|
|
|
+ sed -i "s/revision=$readme_midware_revision/revision=$midware_revision/" readme.txt
|
|
|
+ svn add tv-midware-manager.jar
|
|
|
+ svn add readme.txt
|
|
|
+ svn add oat/
|
|
|
+ svn commit -m "dailybuild commit revision $midware_revision"
|
|
|
+ fi
|
|
|
+ cd "${ANDROID_DIR}"/vendor/tv051/app/prebuilt_app/ || exit
|
|
|
+ rm -rf TVMidwareManager/
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+setMakeFileBuildNumber()
|
|
|
+{
|
|
|
+ cd "${ANDROID_DIR}"/build/make || exit
|
|
|
+ git checkout -- core/Makefile
|
|
|
+ # 0:11 - 取左边11个字符判断是否="V8-T851MGL-LF1V"
|
|
|
+ if [ ${Arg_VersionNum:0:15} == 'V8-T851MGL-LF1V' ]; then
|
|
|
+ BUILD_NUMBER=${Arg_VersionNum:0-3} #0-3:取最后3位;
|
|
|
+ else
|
|
|
+ BUILD_NUMBER='dailybuild'${Arg_VersionNum##*debug}
|
|
|
+ fi
|
|
|
+ echo ${BUILD_NUMBER}
|
|
|
+ sed -i "s/BF_BUILD_NUMBER := 000/BF_BUILD_NUMBER := ${BUILD_NUMBER}/g" core/Makefile
|
|
|
+ sed -i "s/BUILD_NUMBER_FROM_FILE:= 000/BUILD_NUMBER_FROM_FILE:= ${BUILD_NUMBER}/g" core/Makefile
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+compile()
|
|
|
+{
|
|
|
+ setMakeFileBuildNumber
|
|
|
+ pre_build
|
|
|
+ build_img
|
|
|
+ copy_file
|
|
|
+ save_apk_svn
|
|
|
+ save_version_number
|
|
|
+ if [ $IC_OTA = true ];then
|
|
|
+ make_incrementalOTA
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+main()
|
|
|
+{
|
|
|
+ # 如果外部参数>0,解析参数;
|
|
|
+ if [ $# -gt 0 ]; then
|
|
|
+ parseArgument $@
|
|
|
+ else
|
|
|
+ manualArgument
|
|
|
+ fi
|
|
|
+
|
|
|
+ # 初始化参数;
|
|
|
+ initArgument
|
|
|
+
|
|
|
+ # 编译;
|
|
|
+ compile
|
|
|
+}
|
|
|
+
|
|
|
+main $@
|