android开发之采用perl脚本语言开发ota差异包自动编译脚本

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;
	}

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值