编译服务器使用的客制化脚本小结

脚本必要步骤:

0.cd 进入project根目录(写绝对路径)

1.执行repo sync去同步代码,source ./build/envsetup.sh,根据需要是否执行make clean

2.获取project name,这个用于定位对应的device target

3.定义某些需要用到的路径,或者通过参数获取,如开机logo的路径,开机动画的路径,目标device target的路径,客制化目录路径

4.定义一个脚本,用于客制化时在里面加入一些export字段。

5.定义一个脚本,用于客制化时,给系统应用开发人员自定义一些字段,供其在Android.mk中使用,用于判断当前项目的一些情况,如修改可以定义makefile字段的文件,在其中加入字段。

6.删除一些之前编译生成,现在不需要的文件。

7.在编译前执行复制操作,将一些需要复制东西,在编译前复制到指定的路径下,如:一下overlay的东西

8.执行make命令,并将make输出导出到一个log文件中。

9.make命令执行完后,判断是否编译成功(搜索log文件中是否包含某些关键字)

10.如果编译成功,则使用make otapackage生成ota包,并且作一些打包复制的动作去把整包和ota包打包好放到一个命名为版本号加上时间戳的文件夹中。

11.因为编译时产生的一些东西,如果不清楚会影响下次编译,所以需要checkout指定的目录。

注意:

在给脚本传参数时,不能在脚本的方法中获取传给脚本的参数,在方法中只能获取传给方法的参数(在调用方法时,在后面跟着字段)


使用jenkins自动编译时,创建一个项目,然后添加参数,每个参数可以有选项,也可以自己填写,添加默认项。这样并不会把添加的参数传给脚本。脚本还是要在command框中显式调用,并显式传参,添加的参数的名称相当于一个字段名,然后使用这个字段时,就使用$取值即可。

编译时选择build with paramter,然后写入参数值,如果是默认值,可以不写。如果要修改command和参数配置,则选择“配置”

在编译后执行复制操作,将一些不需要编译的apk直接放到out目录下。将out目录打包,将ota的包打包,复制到一个文件夹中,然后复制专门放版本的路径下。



MTK项目的客制化编译脚本:

#!/bin/bash


ANDROID_PATH=/home/code/mtk8735_3.0_Y50BPRO
cd $ANDROID_PATH

isDaily=$5
IsClean=$4
VersionNumber=$3



	echo "[autobuild.sh]:  source build/envsetup.sh"
	. ./build/envsetup.sh
	lunch $2              #zhangjinbiao
	echo lunch1:$2++++++++++++++++++
    CUR_PROJECT=`get_build_var MTK_PROJECT`
	
	PackagePath="out/target/product/"$CUR_PROJECT"/"
	echo "[autobuild.sh]:  current project: $CUR_PROJECT"
#修改点	
DATE=`date "+%Y%m%d"`
COMMITFILE="$ANDROID_PATH"/"$DATE"Y50BPRO.txt
#repo sync
echo >> $COMMITFILE
echo >> $COMMITFILE
echo "====`date`====commit" >> $COMMITFILE
date "+%Y-%m-%d %H:%M:%S" >> $COMMITFILE
repo forall -p -c git log --since="1 days" --pretty=format:"%s----%an" --no-merges > temp.log
cat temp.log | while read line
do 
 templine=${line#[1mproject }
 echo ${templine%[m} >> $COMMITFILE
done
tail -n 1 temp.log >> $COMMITFILE

#编译后输出目录
OUT=out/target/product/$CUR_PROJECT
#目标设备路径
TARGET_DEVICE_DIR=device/yongyida/$CUR_PROJECT
MTK_COMMON=device/mediatek/common
MTK_PROJECT_PATH=device/mediatek/mt6735
MTK_LOGO_PATH=bootable/bootloader/lk/dev/logo
MTK_BOOTANIMATION_PATH=vendor/mediatek/proprietary/operator/OP02/prebuilt/bootanim/bootanimation/
#MTK_SERVICE_JET_PATH=packages/apps/YYDRobotVoiceMainService/y50bpro_dev/assets/ivw/

echo "............run here 1................"

#客制化配置路径
CUSTOMIZATION_PATH=$1
echo CUSTOMIZATION_PATH:$CUSTOMIZATION_PATH++++++++++++++++++++
length=${#CUSTOMIZATION_PATH}
lastchar=${CUSTOMIZATION_PATH:length-1:length}
if [[ $lastchar = "/" ]]; then
	CUSTOMIZATION_PATH=${CUSTOMIZATION_PATH:0:length-1}
fi
echo "............run here 2................"


export CUSTOMIZATION_PATH
export OUT
export TARGET_DEVICE_DIR
export MTK_COMMON
export MTK_PROJECT_PATH
export MTK_LOGO_PATH
export CUR_PROJECT

#. yongyida/tools/copyghookfiles.sh


#if [ ! -e $CUSTOMIZATION_PATH/product_config.sh ]; then
#	echo "输入的配置路径错误"
#	exit 1
#fi 


#执行客制化配置目录下的 product_config.sh 以确定机器型号
. $CUSTOMIZATION_PATH/product_config.sh
echo "USER="$USER
echo "TARGET_PRODUCT="$TARGET_PRODUCT
echo "TARGET_BUILD_VARIANT="$TARGET_BUILD_VARIANT
echo "CUSTOMER_PRODUCT="$CUSTOMER_PRODUCT
echo "WIFI_ONLY="$WIFI_ONLY
echo "CUSTOMIZATION_PATH="$CUSTOMIZATION_PATH
echo "CUR_PROJECT="$CUR_PROJECT



#*******************************************************************


#**************************************************************************************************
#删除一些上一次客制化编译的文件和恢复默认配置

#if [ -d lib ]; then
#	rm -rf lib/
#fi


#删除一些上一次客制化编译的文件
if [ -d $OUT/system ]; then
	rm -rf $OUT/system
fi

if [ -d $OUT/obj/APPS ]; then
	rm -rf $OUT/obj/APPS
fi

if [ -d out/target/common/obj/APPS ]; then
	rm -rf out/target/common/obj/APPS
fi

if [ -d $OUT/obj/BOOTLOADER_OBJ ]; then
	rm -rf $OUT/obj/BOOTLOADER_OBJ
fi

if [ -d out/target/common/obj/JAVA_LIBRARIES ]; then
	rm -rf out/target/common/obj/JAVA_LIBRARIES
fi


#checkout contact 的 AndroidManifest.xml
cd packages/apps/Contacts/
git checkout -- AndroidManifest.xml
cd ../../../

#checkout system 下的 charger
#cd ../../../system/core/
#git checkout charger/images/
#cd ../../

#恢复默认的overlay和checkout device目录
rm -rf $TARGET_DEVICE_DIR/overlay/  
cd $TARGET_DEVICE_DIR/
git checkout ./
cd ../../../

#checkout 第一帧logo
cd bootable/bootloader/lk/dev/logo/
git checkout ./
cd ../../../../../
#rm -rf $OUT/obj/EXECUTABLES/efilinux-${TARGET_BUILD_VARIANT}_intermediates



#删除设备目标路径(TARGET_DEVICE_DIR)下的overrides.prop 和 product_overrides.prop
if [ -e $TARGET_DEVICE_DIR/product_overrides.prop ]; then
	rm $TARGET_DEVICE_DIR/product_overrides.prop
fi
if [ -e $TARGET_DEVICE_DIR/overrides.prop ]; then
	rm $TARGET_DEVICE_DIR/overrides.prop
fi


#**************************************************************************************************
echo "run r_init.sh..."
. r_init.sh

#**************************************************************************************************
#执行机器型号默认的相关配置
. yongyida/product/product_common_config.sh
#**************************************************************************************************



#**************************************************************************************************
#覆盖device下一些文件配置,编译进固件。

#拷贝 overrides.prop 到设备目标路径,即 device/yongyida/y20a_dev 下,修改build.prop属性。
if [ -e $CUSTOMIZATION_PATH/oem/overrides.prop ]; then
	cp  -rf $CUSTOMIZATION_PATH/oem/overrides.prop $TARGET_DEVICE_DIR/
fi


# 针对客户项目,修改以下几个文件中配置 custom.conf(device/mediatek/common/) ProjectConfig.mk(device/yongyida/y20a_dev/)
if [ -e $CUSTOMIZATION_PATH/oem/modifyconfigs_before_build ]; then
. yongyida/tools/modify_config_before_make.sh $CUSTOMIZATION_PATH/oem/modifyconfigs_before_build
fi



#----------product_common_config.sh中处理----------------------------
#如有特殊配置,拷贝机器型号配置文件anzhen4_mrd7_64_diffconfig,此配置和yongyida/product下对应型的anzhen4_mrd7_64_diffconfig
#共用的配置是一致的,比如摄像头、触摸屏等配置。此处添加不是多此一举,而是为了一些特殊需求另外添加并覆盖。
#比如台电需求中的要求内存容量显示要足量,需要在内核中配置,一般客户不需要的就不用另外添加。
#if [ -e $CUSTOMIZATION_PATH/oem/anzhen4_mrd7_64_diffconfig ]; then
#	cp  -rf $CUSTOMIZATION_PATH/oem/anzhen4_mrd7_64_diffconfig $TARGET_DEVICE_DIR/
#fi
#**************************************************************************************************



#**************************************************************************************************
#拷贝overlays
if [ -d $CUSTOMIZATION_PATH/oem/overlays ]; then
	cp  -rf $CUSTOMIZATION_PATH/oem/overlays/* $TARGET_DEVICE_DIR/overlay/
fi

if [ -e $CUSTOMIZATION_PATH/oem/device.mk ]; then
	cp  -rf $CUSTOMIZATION_PATH/oem/device.mk $MTK_COMMON/
fi


#拷贝唤醒词
#if [ -e $CUSTOMIZATION_PATH/oem/nihaoxiaoyu.jet ]; then
#      $(warning nihaoxiaoyu is exist)
#   cp -rf $CUSTOMIZATION_PATH/oem/nihaoxiaoyu.jet $MTK_SERVICE_JET_PATH
#fi


#拷贝默认壁纸
#if [ -e $CUSTOMIZATION_PATH/oem/default_wallpaper.jpg ]; then
#	mkdir -p $TARGET_DEVICE_DIR/overlay/frameworks/base/core/res/res/drawable-sw720dp-nodpi/
#	cp -rf $CUSTOMIZATION_PATH/oem/default_wallpaper.jpg $TARGET_DEVICE_DIR/overlay/frameworks/base/core/res/res/drawable-sw720dp-nodpi/
#	mkdir -p $TARGET_DEVICE_DIR/overlay/frameworks/base/core/res/res/drawable-sw600dp-nodpi/
#	cp -rf $CUSTOMIZATION_PATH/oem/default_wallpaper.jpg $TARGET_DEVICE_DIR/overlay/frameworks/base/core/res/res/drawable-sw600dp-nodpi/
#fi

#拷贝第一帧logo:实则为uboot和kernel的两帧logo	qxga-2048*1536, wxga-1280*800, xga-1024*768
ubootimg=_uboot.bmp
kernelimg=_kernel.bmp
lowbatteryimg=_low_battery.bmp
if [ -e $CUSTOMIZATION_PATH/oem/bootlogo.bmp ]; then
	cp -rf $CUSTOMIZATION_PATH/oem/bootlogo.bmp $MTK_LOGO_PATH/$CUR_PROJECT/$CUR_PROJECT$kernelimg
	cp -rf $CUSTOMIZATION_PATH/oem/bootlogo.bmp $MTK_LOGO_PATH/$CUR_PROJECT/$CUR_PROJECT$ubootimg	
	cp -rf $CUSTOMIZATION_PATH/oem/bootlogo.bmp $MTK_LOGO_PATH/$CUR_PROJECT/$CUR_PROJECT$lowbatteryimg
fi
#**************************************************************************************************


if [ -e $CUSTOMIZATION_PATH/oem/bootanimation.zip ]; then
	cp -rf $CUSTOMIZATION_PATH/oem/bootanimation.zip $MTK_BOOTANIMATION_PATH/$CUR_PROJECT/
fi

#拷贝开机动画到目录下


#**************************************************************************************************
#拷贝要内置到system/app/下的apk的库文件到临时文件lib
#在Makefile执行oem_config.xml时再拷贝到system/lib/下
mkdir -p oemapk/app/
shopt -s expand_aliases
alias cp='./yongyida/tools/copy_apk_so.sh'
if [ -d $CUSTOMIZATION_PATH/apk/system_apk ]; then
	for filename in `ls $CUSTOMIZATION_PATH/apk/system_apk`
	do
		echo $filename 
		cp $CUSTOMIZATION_PATH/apk/system_apk/$filename $filename "system_apk"
		
	done
fi
unalias cp

#拷贝要内置到system/priv-app/下的apk的库文件到临时文件lib
#在Makefile执行oem_config.xml时再拷贝到system/lib/下
mkdir oemapk/priv-app/
alias cp='./yongyida/tools/copy_apk_so.sh'
if [ -d $CUSTOMIZATION_PATH/apk/system_priv_apk ]; then
	for filename in `ls $CUSTOMIZATION_PATH/apk/system_priv_apk`
	do
		cp $CUSTOMIZATION_PATH/apk/system_priv_apk/$filename $filename "system_priv_apk"
	done
fi
unalias cp


#modify  versionNumber build/tools/buildinfo.sh
changeBuildinfo(){	
	if [ -n "$VersionNumber" ];then
		echo -e "[autobuild.sh]: \e[0;31;1m You are changing version number to $VersionNumber \033[0m"
	else
		echo -e "[autobuild.sh]: \e[0;31;1m Nothing input!! \033[0m The default version number: \e[0;31;1m YOS_Y50BP_V1R013 \033[0m"
		VersionNumber="YOS_Y50BP_V1R013"
	fi
#	read -p "[autobuild.sh]:  Is this a daily build? (yes/no default:yes):" isDaily
	if [ "$isDaily" = "no" ]; then
		VersionNumber="$VersionNumber"
		echo isDaily:$isDaily+++++++++++++++++++++++++++++++
	else 
		VersionNumber="$VersionNumber"_`date +%Y%m%d%H%M`
		echo isDaily:$isDaily+++++++++++++++++++++++++++++++
	fi
	
	# for MTK_FPGA_LOAD_SUPPORT @{
    local projectConfigFile="device/yongyida/y50bpro_dev/ProjectConfig.mk"
    local src=`grep MTK_FPGA_LOAD_SUPPORT $projectConfigFile`
    if [ "$isDaily" = "no" ]; then
        sed -i "s/$src/MTK_FPGA_LOAD_SUPPORT=no/" $projectConfigFile
	else
        sed -i "s/$src/MTK_FPGA_LOAD_SUPPORT=yes/" $projectConfigFile
    fi
	# @}
	
	OldVersionNumber=`grep "ro.wisky.build_number_one" build/tools/buildinfo.sh`
	newVersion="echo \"ro.wisky.build_number_one=$VersionNumber\""
	sed -i "s/$OldVersionNumber/$newVersion/" build/tools/buildinfo.sh
	echo -e "[autobuild.sh]: \e[0;31;1m new ro.wisky.build_number_one=$VersionNumber \033[0m"
}

#modify new versionNumber device/.../system.prop
changeSystemProp(){
	if [[ $CUR_PROJECT =~ "wisky8735" ]];then
		propPath="device/wisky/$CUR_PROJECT/system.prop"
	else
		propPath="device/yongyida/$CUR_PROJECT/system.prop"
	fi
	
	read -p "[autobuild.sh]:  Please input new version number (default \"YOS2.53.013\"): " SecVersionNumber
#	echo "[autobuild.sh]:  modify $propPath"
#	if [ -n "$SecVersionNumber" ];then
#		echo -e "[autobuild.sh]: \e[0;31;1m You are changing version number to $SecVersionNumber \033[0m"
#	else
		echo -e "[autobuild.sh]: \e[0;31;1m Nothing input!! \033[0m The default version number: \e[0;31;1m YOS2.53.013 \033[0m"
		SecVersionNumber="YOS2.53.013"
#	fi
	SecOldVersionNumber=`grep "robot.os_version" $propPath`
	SecNewVersion="robot.os_version=$SecVersionNumber.`date +%m%d`"
	sed -i "s/$SecOldVersionNumber/$SecNewVersion/" $propPath
	echo -e "[autobuild.sh]: \e[0;31;1m new robot.os_version=$SecVersionNumber \033[0m"
}

#build prepare: All clean or delete something
isCleanAll(){
	echo -e "[autobuild.sh]: \e[0;31;1m Do you want to make clean? \033[0m"
#	read -p "[autobuild.sh]:  Please input (yes/no default:no): " IsClean
	if [ "$IsClean" = "yes" ];then
		make clean
	else
		echo -e "[autobuild.sh]: \e[0;31;1m rm -rf "$PackagePath"system/ \033[0m"
			rm -rf "$PackagePath"system/
		echo -e "[autobuild.sh]: \e[0;31;1m rm -rf "$PackagePath"obj/APPS/YYD* \033[0m"
			rm -rf "$PackagePath"obj/APPS/YYD*
		echo -e "[autobuild.sh]: \e[0;31;1m rm -rf out/target/common/obj/APPS/YYD* \033[0m"
			rm -rf out/target/common/obj/APPS/YYD*
		echo -e "[autobuild.sh]: \e[0;31;1m rm -rf out/target/common/obj/JAVA_LIBRARIES/* \033[0m"
			rm -rf "out/target/common/obj/JAVA_LIBRARIES/"
	fi
}

buildSystem(){
	echo -e "[autobuild.sh]: \e[0;34;1m make -j4 2>&1 | tee Build.log\033[0m"
	if [ -f Build.log ];then
		rm -rf Build.log
	fi
#	export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
#    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-7-openjdk-amd64/bin
#    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
#    export CLASSPATH=.:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-7-openjdk-amd64/lib/dt.jar:/usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar
unset JAVA_HOME
unset CLASSPATH
	
	make -j8 2>&1 | tee Build.log

	if [ -f Build.log ];then
		result=`grep "make completed successfully" Build.log`
		if [ -n "$result" ];then
     
		  packSystem
		else 
			echo -e "[autobuild.sh]: \e[0;31;1m Failed! Please check your code and review Build.log.\033[0m"
		fi
	fi
}

#build finished and packing system as *.tar.gz
packSystem(){ 
    make otapackage
	echo -e "[autobuild.sh]:  Packing System Image... "
	mkdir "$VersionNumber"
	cp "$PackagePath"boot.img "$VersionNumber"
	cp "$PackagePath"cache.img "$VersionNumber"
	cp "$PackagePath"lk.bin "$VersionNumber"
	cp "$PackagePath"logo.bin "$VersionNumber"
	cp "$PackagePath"MT6735_Android_scatter.txt "$VersionNumber"
	cp "$PackagePath"preloader_$CUR_PROJECT.bin "$VersionNumber"
	cp "$PackagePath"recovery.img "$VersionNumber"
	cp "$PackagePath"secro.img "$VersionNumber"
	cp "$PackagePath"system.img "$VersionNumber"
	cp "$PackagePath"trustzone.bin "$VersionNumber"
	cp "$PackagePath"userdata.img "$VersionNumber"
	cp "$PackagePath"obj/CGEN/AP* "$VersionNumber"
	cp "$PackagePath"obj/ETC/BPLGUInfoCustomAppSrcP_MT6735_S00_MOLY_LR9_W1444_MD_LWTG_CMCC_MP_V6_1_ltg_n_intermediates/* "$VersionNumber"
	cp "$PackagePath"obj/ETC/BPLGUInfoCustomAppSrcP_MT6735_S00_MOLY_LR9_W1444_MD_LWTG_CMCC_MP_V6_1_lwg_n_intermediates/* "$VersionNumber"
	
	tar czf "$VersionNumber".tar.gz "$VersionNumber"
    echo "[autobuild.sh]:  delete $VersionNumber"
    rm -rf $VersionNumber
    
	mkdir "$VersionNumber"_fota
	mv $PackagePath*.zip "$VersionNumber"_fota  
    mkdir "$VersionNumber"
    mv "$VersionNumber".tar.gz $VersionNumber
	mv "$VersionNumber"_fota $VersionNumber
	mv "$COMMITFILE" $VersionNumber
	#备份rom
echo "********************copy ROM to Server(172.16.1.242)********************"
scp -r "$VersionNumber" [email protected]:/home/sw_release/test_rom/y50bpro/$VersionNumber
rm -rf "$VersionNumber"
	echo
	echo -e "[autobuild.sh]:\e[0;32;1m***** See Fota files in "$VersionNumber"_fota folder!***** \033[0m"
	echo
	
	local end_time=$(date +"%s")
    local tdiff=$(($end_time-$startTime))
    local hours=$(($tdiff / 3600 ))
    local mins=$((($tdiff % 3600) / 60))
    local secs=$(($tdiff % 60))
	echo
    if [[ $ret -eq 0 ]] ; then
        echo -n -e "[autobuild.sh]:  #### make completed successfully "
    else
        echo -n -e "[autobuild.sh]:  #### make failed to build some targets "
    fi
    if [[ $hours -gt 0 ]] ; then
        printf "(%02g:%02g:%02g (hh:mm:ss))" $hours $mins $secs
    elif [[ $mins -gt 0 ]] ; then
        printf "(%02g:%02g (mm:ss))" $mins $secs
    elif [[ $secs -gt 0 ]] ; then
        printf "(%s seconds)" $secs
    fi
    echo -e " ####"
	echo -e "[autobuild.sh]: \e[0;32;1m Completed!!! o(^_^)o Please check your $VersionNumber.tar.gz file. \033[0m"
    echo
}

########### Shell start to execute here ###########
startTime=$(date +"%s")
#getUpdateCode
#lunchSelect
#commonconfig
changeBuildinfo
changeSystemProp
isCleanAll
buildSystem


#还原系统
echo "********************checkout System********************"
cd device
git checkout ./

cd ../kernel-3.10/
git checkout ./

cd ..


RK的编译脚本

#!/bin/bash
#begin Jenkins build,ltc 2018/01/12,update

RK_CODE_DIR=/home/code #or /home/code(172.16.1.16/185)
RK_PROJECT=rk3399

RK_OVERLAYS_DIR=device/rockchip/rk3399/rk3399_mid
RK_COMMOM_DIR=device/rockchip/common
RK_RK3399_DIR=device/rockchip/rk3399
RK_LOGO_DIR=kernel/
RK_APPS_DIR=packages/apps

RK_COMMOM=common
RK_DEVICE=rk3399_mid

BUILD_TYPES=user
ISDAILY=true
CUSTOMER_NAME_TYPES=fxy

if [ -n "$2" ];then
    RK_DEVICE=$2
fi
if [ -n "$3" ];then
    BUILD_TYPES=$3
fi
if [ -n "$4" ];then
    ISDAILY=$4
fi
if [ -n "$5" ];then
    CUSTOMER_NAME_TYPES=$5
fi

if [ "$CUSTOMER_NAME_TYPES" = "zh_CN" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/zh_CN
elif [ "$CUSTOMER_NAME_TYPES" = "en_US" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/en_US
elif [ "$CUSTOMER_NAME_TYPES" = "fxy" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/fxy
elif [ "$CUSTOMER_NAME_TYPES" = "caro" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/caro
elif [ "$CUSTOMER_NAME_TYPES" = "zh_szjc" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/y128/zh_CN/xiaoyong_SZJC
elif [ "$CUSTOMER_NAME_TYPES" = "zh_default" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/y128/zh_CN/xiaoyong_default
elif [ "$CUSTOMER_NAME_TYPES" = "zh_bbx" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/y128/zh_CN/DongNi_BBX
elif [ "$CUSTOMER_NAME_TYPES" = "zh_fxy" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/y128/zh_CN/DongNi_FXY
elif [ "$CUSTOMER_NAME_TYPES" = "y150_zh_default" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/y150/zh_CN/xiaoyong_default
elif [ "$CUSTOMER_NAME_TYPES" = "yq110_zh_default" ];then
	CUSTOMIZATION_PATH=vendor/yongyida/oem/yq110/zh_CN/xiaoyong_default
fi
export CUSTOMIZATION_PATH

cd $RK_CODE_DIR

#更新代码
echo "********************update Code********************"
WORK_DIR=${RK_PROJECT}_"$1"
cd ${WORK_DIR}
pwd
repo sync -j8 --no-tags

#代码修改记录
DATE=`date "+%Y%m%d"`
COMMITFILE=${RK_CODE_DIR}/${WORK_DIR}/${DATE}_rscommit.txt
echo "====`date`====commit" >> $COMMITFILE
date "+%Y-%m-%d %H:%M:%S" >> $COMMITFILE
repo forall -p -c git log --since="1 days" --pretty=format:"%s----%an" --no-merges > temp.log
cat temp.log | while read line
do
 templine=${line#[1mproject }
 echo ${templine%[m} >> $COMMITFILE
done
tail -n 1 temp.log >> $COMMITFILE
rm temp.log

#拷贝开机logo bmp图片
if [ -e $CUSTOMIZATION_PATH/logo/logo.bmp ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/logo.bmp $RK_LOGO_DIR/logo.bmp
fi
if [ -e $CUSTOMIZATION_PATH/logo/logo_kernel.bmp ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/logo_kernel.bmp $RK_LOGO_DIR/logo_kernel.bmp
fi

#拷贝开/关机动画
if [ -e $CUSTOMIZATION_PATH/logo/bootanimation.zip ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/bootanimation.zip $RK_COMMOM_DIR/bootshutdown/bootanimation.zip
fi
if [ -e $CUSTOMIZATION_PATH/logo/shutdownanimation.zip ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/shutdownanimation.zip $RK_COMMOM_DIR/bootshutdown/shutdownanimation.zip
fi

#拷贝开/关机铃声
if [ -e $CUSTOMIZATION_PATH/logo/startup.wav ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/startup.wav $RK_COMMOM_DIR/bootshutdown/startup.wav
fi
if [ -e $CUSTOMIZATION_PATH/logo/shutdown.wav ]; then
	cp  -rf $CUSTOMIZATION_PATH/logo/shutdown.wav $RK_COMMOM_DIR/bootshutdown/shutdown.wav
fi

#拷贝系统属性、平台配置文件
if [ -e $CUSTOMIZATION_PATH/system_prop/system.prop ]; then
	cp  -rf $CUSTOMIZATION_PATH/system_prop/system.prop $RK_RK3399_DIR/rk3399_mid/system.prop
fi
if [ -e $CUSTOMIZATION_PATH/BroadConfig/BoardConfig.mk ]; then
	cp  -rf $CUSTOMIZATION_PATH/BroadConfig/BoardConfig.mk $RK_RK3399_DIR/rk3399_mid/BoardConfig.mk
fi
if [ -e $CUSTOMIZATION_PATH/rk3399_mid.mk ]; then
	cp  -rf $CUSTOMIZATION_PATH/rk3399_mid.mk $RK_RK3399_DIR/rk3399_mid.mk
fi

#拷贝apk
if [ -e $CUSTOMIZATION_PATH/FotaUpdate.apk ]; then
	cp  -rf $CUSTOMIZATION_PATH/FotaUpdate.apk $RK_APPS_DIR/FotaUpdateApp/FotaUpdate/withIcon/FotaUpdate.apk
fi

#拷贝overlay文件
if [ -d $CUSTOMIZATION_PATH/overlay ]; then
	cp  -rf $CUSTOMIZATION_PATH/overlay/* $RK_OVERLAYS_DIR/overlay/
fi

#拷贝要内置到system/app/下的apk的库文件到临时文件lib,在Makefile执行oem_config.sh时再拷贝到system/lib/下
mkdir -p oemapk/app/

if [ -d $CUSTOMIZATION_PATH/apk/system_apk ]; then
	for filename in `ls $CUSTOMIZATION_PATH/apk/system_apk`
	do
		echo $filename
		echo $CUSTOMIZATION_PATH/apk/system_apk/$filename
		./vendor/yongyida/copy_apk_so.sh $CUSTOMIZATION_PATH/apk/system_apk/$filename $filename "system_apk"

	done
fi

#拷贝要内置到system/priv-app/下的apk的库文件到临时文件lib,在Makefile执行oem_config.sh时再拷贝到system/lib/下
mkdir oemapk/priv-app/
if [ -d $CUSTOMIZATION_PATH/apk/system_priv_apk ]; then
	for filename in `ls $CUSTOMIZATION_PATH/apk/system_priv_apk`
	do
		./vendor/yongyida/copy_apk_so.sh $CUSTOMIZATION_PATH/apk/system_priv_apk/$filename $filename "system_priv_apk"
	done
fi

#修改软件版本
TARGET_DEVICE_DIR="device/rockchip/"${RK_PROJECT}/${RK_DEVICE}
propPath="$TARGET_DEVICE_DIR/system.prop"
SecOldVersionNumber=`grep "robot.os_version"  $propPath`

VersionNumber=`echo ${SecOldVersionNumber} | awk -F '=' '{print $2}'`

if [ $ISDAILY ];then
    VersionNumber=${VersionNumber}_`date +%Y%m%d%H%M`
    SecNewVersion="robot.os_version=$VersionNumber"
    sed -i "s/$SecOldVersionNumber/$SecNewVersion/g" $propPath
fi

echo "********************source envsetup.sh********************"
source build/envsetup.sh
lunch ${RK_DEVICE}-${BUILD_TYPES}

#开始编译
if  $ISDAILY ;then
	echo "********************make installclean********************"
	make installclean
else
	echo "********************clean********************"
	make clean
fi

echo "********************build U-boot********************"
cd u-boot
make distclean
make rk3399_defconfig
make ARCHV=aarch64

echo "********************build Kernel********************"
cd ..
cd kernel
make ARCH=arm64 rockchip_defconfig -j8
make ARCH=arm64 rk3399-mid-818-android.img -j8

echo "********************build Android********************"
cd ..
chmod 777 packages/apps/FotaUpdateApp/FotaUpdateInfo.sh
make -j8
echo $?

#防止ota编译出错
cd build/tools/drmsigntool/
mm -B
cd ../../../

echo "********************build Otapackage********************"
chmod 777 packages/apps/FotaUpdateApp/FotaUpdatePackage.sh
make otapackage

echo "********************package Imge********************"
./mkimage.sh ota
#结束编译

unset CUSTOMIZATION_PATH

#还原系统
echo "********************checkout System********************"
cd device/rockchip/${RK_PROJECT}
git checkout ./

cd ${RK_CODE_DIR}/${WORK_DIR}
cd device/rockchip/${RK_COMMOM}
git checkout ./

cd ${RK_CODE_DIR}/${WORK_DIR}
cd kernel/
git checkout ./

if [ "$CUSTOMER_NAME_TYPES" = "caro" ];then
	cd ${RK_CODE_DIR}/${WORK_DIR}
	cd packages/apps/FotaUpdateApp
	git checkout ./
fi

cd ${RK_CODE_DIR}/${WORK_DIR}

#打包rom
OUT=out/target/product/${RK_DEVICE}

echo "********************tar Images********************"
tar -zcvf "$VersionNumber".tar.gz rockdev

echo "********************copy fota zip file********************"
mkdir "$VersionNumber"
mv "$VersionNumber".tar.gz "$VersionNumber"
cp $OUT/target_files-package.zip "$VersionNumber"
mv "$COMMITFILE" "$VersionNumber"

#备份rom
echo "********************copy ROM to Server(172.16.1.242)********************"
scp -r "$VersionNumber" [email protected]:/home/sw_release/test_rom/rk3399/"$1"
rm -rf "$VersionNumber"

echo -e "\033[5;36m Hi goodman,finish Android versions build. `date +%Y/%m/%d-%H:%M`\033[0m"
#end Jenkins build







猜你喜欢

转载自blog.csdn.net/b1480521874/article/details/80103521