引子
最近的工作是一个在Android平台上进行开发的项目,我个人基本是不改动Android部分的代码,但是我所在的项目需要使用到Android编译出来的很多目标文件。另一方面,我又不是开发apk等基于通用Android平台的项目,即Android部分的代码是有其他同事在进行维护。那么就会有这样的场景:我需要保持Android部分代码的更新和并构建出来。
编译过整个Android工程的人都知道编译一次的时间大概要30分钟以上(如果你是独占服务器且内存超大,那么请默默走开~),要是整个工程全部进行重编(加上-B参数),则耗时至少在2个小时以上。假设你想要加速编译的过程而使用 -jN参数时,那你就等着被其他同事骂吧(因为会拖的别人完全无法进行任何操作)。
对于我的工作来讲,要求保持Android部分代码的更新,但是时效性并没有太强,即只要Android部分代码有改动了,我这边抽空的时候更新下载并编译出来即可。是的,只需要抽空完成这个操作即可,但是作为一个程序员一定知道的,如果要抽空完成一件事,那么这件事就基本上遥遥无期了。
因此,我就想何不搞一个自动更新并构建的脚本,让这个工作在晚上没人的时候静悄悄的完成,这就有了下面的脚本和这篇文章。
crontab_android-4.2.1_r1.sh
先看一下这个脚本的具体内容:
#! /bin/bash
ANDROID_4_2=~/android-4.2.1_r1
CRONTAB_LOG_FOLDER=~/bak/crontablog
NONEED_TO_REVERT=build/core/main.mk
cd $ANDROID_4_2
HEAD_VER=`svn log -r HEAD | awk '{if(NR==2)print $1}' | cut -b 2-`
BASE_VER=`svn log -r BASE | awk '{if(NR==2)print $1}' | cut -b 2-`
DATE=`date "+%Y-%m-%d"`
if [ $HEAD_VER -eq $BASE_VER ]; then
echo "$DATE: current version($BASE_VER) is the same with svn server($HEAD_VER), no need to build system" >> $CRONTAB_LOG_FOLDER/crontab_log.txt
else
echo "$DATE: current version($BASE_VER) is different with svn server($HEAD_VER), need to build system" >> $CRONTAB_LOG_FOLDER/crontab_log.txt
BUILD_LOG=$CRONTAB_LOG_FOLDER/${ANDROID_4_2##*/}_build_$DATE.log