Ota差异包自动编译脚本功能
每天服务器自动调用进行编译,考虑到必须全部自动化,那么该脚本要具备以下功能:
(1) 在/home/share/androidbuilds/目录中搜索以ota*开头的目录,并存储到数组中,计算有多少个该目录。以作为2周一循环的计算,那么如果有14个该目录,则认为该清理,并重新生成基础版本了。
(2) 脚本自行配置Makefile里面的参数,由于每次对比的基础包都不一样,脚本必须自动获取老版本的zip包路径,并修改到Makefile里面。
(3) 脚本自行配置buildinfo.sh里面的V_BUILDID,由于服务器上的buildinfo.sh文件和ota编译时有差别,需要将buildinfo.sh固定备份一个,每次编译新的版本,需将buildinfo.sh里面的V_BUILDID配置一个新的值,并替换掉code中的buildinfo.sh。
(4) 从文件build.prob中获取ro.build.version.release字符串结果,如“4.0.5”。并将该字符组合成ota-4.0.5-vn-out,创建该目录,作当前版本的存储目录。且4.0.5会作为zip包命名的一部分
(5) 循环生成差异包后,从对比包的名字中提取版本号,与当前版本号组合,作为差异包的命名组合。
(6) 每次编译完,除了第一个版本会备份img文件之外,其余版本均不作备份。每个版本需要备份签名的zip包和没有签名的zip。第N个版本需要备份0…N-1到N的差异包。
最后半成品如下,在每天的0点自动进行编译,待测试人员上班后,就直接拿结果测试了。
#!/usr/bin/perl -w
#please setting the compare source zip file
#if you input $VERSION_NUM == N,
#so must set $source_list[0]="xxx/xxx.zip"..... $source_list[n-2]="yyy/yyy.zip"
#$source_list[0]="/home/yourname/workspace/android4.0.0_out/ota-4.0.3unsigned.zip";
#$source_list[1]="/home/yourname/workspace/android4.0.1_out/ota-4.0.3unsigned.zip";
$VERSION_NUM = 0;
$VERID_NUM = 5;
#$V_ANDROID_BUILD_NUM=10;
$verid_list[0]="=ZHIOHBXC3IQFB0YLWWOFPB4Q23SZFT2F";
$verid_list[1]="=54NLHM5CTYHAYXC4Y44EVJZADWLQUZS4";
$verid_list[2]="=1AL1AJHOVTEQODRI3E1XSOLU2UXKRPJZ";
$verid_list[3]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT3";
$verid_list[4]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT4";
$verid_list[5]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[6]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[7]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[8]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[9]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[10]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[11]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[12]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[13]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
$verid_list[14]="=V5RV5C2SZEHDQTGFNHH042QCVA33RPJT";
#please setting the compare source zip file
#$BUILD_PATH="/home/zhangyanhong/workspace";
#$DATE_PATH=`date +%Y%m%d`;
#$FULL_PATH="$BUILD_PATH/android4_3_vmc_i";
#$V_ANDROID_SRC_DIR=$FULL_PATH;
$BUILD_PATH="/home/share/androidbuilds";
$DATE_PATH=$ARGV[0];
$FULL_PATH="$BUILD_PATH/$DATE_PATH";
$V_ANDROID_SRC_DIR="$FULL_PATH/android403";
$UNSIGNED="unsigned";
$SIGNED="signed";
$OUT="out/target/product/vortex";
$OUT_PUT="_out";
print "$DATE_PATH\n";
@source_list=glob "$BUILD_PATH/otatest*/ota-*unsigned.zip";
@sourcedir_list=glob "$BUILD_PATH/otatest*";
foreach (@source_list)
{
print "source list[$VERSION_NUM] = $source_list[$VERSION_NUM]\n";
$VERSION_NUM+=1;
}
print "Running version number is $VERSION_NUM \n";
if ( $VERSION_NUM >= $VERID_NUM )
{
print "delete all version\n";
$k=0;
foreach (@sourcedir_list){
print "dir list[$k] = $sourcedir_list[$k]\n";
system("rm -fr $sourcedir_list[$k]");
$k+=1;
}
$VERSION_NUM = 0;
@source_list=glob "$BUILD_PATH/otatest*/ota-*unsigned.zip";
foreach (@source_list)
{
print "Re source list[$VERSION_NUM] = $source_list[$VERSION_NUM]\n";
$VERSION_NUM+=1;
}
print "Re Running version number is $VERSION_NUM \n";
}
system("cp $BUILD_PATH/buildinfo.sh $V_ANDROID_SRC_DIR/buildinfo_bak.sh");
open HANDLE_MAKEFILE,"$V_ANDROID_SRC_DIR/buildinfo_bak.sh";
open HANDLE_OUT,">$V_ANDROID_SRC_DIR/build/tools/buildinfo.sh";
$oldHandle = select HANDLE_OUT;
foreach my $name2 (<HANDLE_MAKEFILE>)
{
#if($.==1035)
if($name2=~/^V_BUILDID/)
{
chomp($verid_list[$VERSION_NUM]);
substr($name2,9)=$verid_list[$VERSION_NUM];
print "$name2\n";
}
else
{
print "$name2";
}
}
close HANDLE_MAKEFILE;
close HANDLE_OUT;
select $oldHandle;
unlink "$V_ANDROID_SRC_DIR/buildinfo_bak.sh";
print "\n[incota] start make.\n";
chdir $V_ANDROID_SRC_DIR;
#system("sh -c . $V_ANDROID_SRC_DIR/build/envsetup.sh");
#system("sh -c lunch 10");
#system("sh -c cd $V_ANDROID_SRC_DIR");
#system("make -j4");
print "\n[incota] start make otapackage.\n";
system("make otapackage");
open(HANDLE_BUILD, "$V_ANDROID_SRC_DIR/out/target/product/vortex/system/build.prop")|| die "build.prop is not found!!";
while(<HANDLE_BUILD>)
{
#if($.==8)
if(/ro.build.version.release/)
{
chomp($string=substr($_,25));
print "string is $string\n";
}
}
close HANDLE_BUILD;
$result_out="otatest_$string$OUT_PUT$VERSION_NUM";
print "out is $result_out\n";
#chdir "../" or die "cannot change directory to last workspace! : $!";
mkdir "$BUILD_PATH/$result_out";
print "\n[incota] start copy ubi img\n";
if ( $VERSION_NUM == 0 ){
system("cp $V_ANDROID_SRC_DIR/$OUT/8k_256_2048/ubi*.img $BUILD_PATH/$result_out/");
system("cp $V_ANDROID_SRC_DIR/$OUT/recovery.img $BUILD_PATH/$result_out/");
system("cp $V_ANDROID_SRC_DIR/$OUT/boot.img $BUILD_PATH/$result_out/");
system("cp $V_ANDROID_SRC_DIR/$OUT/u-boot.bin $BUILD_PATH/$result_out/");
}
system("cp $V_ANDROID_SRC_DIR/$OUT/system/build.prop $BUILD_PATH/$result_out/");
system("cp $V_ANDROID_SRC_DIR/$OUT/obj/PACKAGING/target_files_intermediates/*.zip $BUILD_PATH/$result_out/ota-$string$UNSIGNED.zip");
system("cp $V_ANDROID_SRC_DIR/$OUT/*-ota-*.zip $BUILD_PATH/$result_out/ota-$string$SIGNED.zip");
print "\n[incota] end copy ubi img\n";
if ( $VERSION_NUM > 0 )
{
$k = 0;
$NUM = 0;
$m = 0;
foreach (@source_list)
{
print "cur path[$m] = $source_list[$m]\n";
$addr = rindex($_,"/");
$str[$k] = substr($_,$addr+1);
$str[$k] =~ s/ota-//g;
$str[$k] =~ s/unsigned.zip//g;
#$str[$k] =~s/\D//g;
if ($str[$k] eq "")
{
$str[$k] = $k;
}
print "source version[$k] = $str[$NUM]\n";
$k += 1;
$m += 1;
}
while ( ($NUM ) < $VERSION_NUM )
{
print "\n[incota][$NUM] start make otaincpackage\n";
if (defined ($source_list[$NUM]))
{
$name = $source_list[$NUM];
chomp($name);
system("cp $V_ANDROID_SRC_DIR/build/core/Makefile $V_ANDROID_SRC_DIR/Makefile_bak");
open HANDLE_MAKEFILE,"$V_ANDROID_SRC_DIR/Makefile_bak";
open HANDLE_OUT,">$V_ANDROID_SRC_DIR/build/core/Makefile";
$oldHandle = select HANDLE_OUT;
foreach my $name2 (<HANDLE_MAKEFILE>)
{
#if($.==1035)
if($name2=~/^OLD_BUILT_TARGET_FILES_PACKAGE/)
{
substr($name2,34)=$name;
print "$name2\n";
}
else
{
print "$name2";
}
}
close HANDLE_MAKEFILE;
close HANDLE_OUT;
select $oldHandle;
system("make otaincpackage");
unlink "$V_ANDROID_SRC_DIR/Makefile_bak";
system("cp $V_ANDROID_SRC_DIR/$OUT/*-otainc-*.zip $BUILD_PATH/$result_out/otainc[$NUM]-$str[$NUM]-$string$SIGNED.zip");
print "\n[incota][$NUM] end make otaincpackage\n";
}
$NUM+=1;
}
}