脚本必要步骤:
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