SubwayTooter-Android-App/apkGen.pl

81 lines
2.0 KiB
Perl

#!/usr/bin/perl --
use strict;
use warnings;
sub cmd($){
print "+ ",$_[0],"\n";
my $rv=system $_[0];
if ($? == -1) {
die "failed to execute: $!\n";
}elsif ($? & 127) {
die "child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without';
}else {
my $rv = $? >> 8;
$rv and die "child exited with value $rv\n";
}
}
cmd "./gradlew --stop";
cmd "rm -rf .gradle/caches/build-cache-*";
cmd "./gradlew clean";
cmd "./dependencyJson.pl";
cmd "./gradlew assembleNoFcmRelease";
cmd "./gradlew assembleFcmRelease";
cmd "./gradlew --stop";
sub getBranch{
my $text = `git rev-parse --abbrev-ref HEAD`;
$text =~ s/\A\s+//;
$text =~ s/\s+\z//;
return $text;
}
sub getDate{
my @lt= localtime;
$lt[4]+=1;$lt[5]+=1900;
return sprintf("%d%02d%02d_%02d%02d%02d",reverse @lt[0..5]);
}
sub getVersion{
my $appBuildGradle = "app/build.gradle.kts";
my($code,$name);
open(my $fh,"<",$appBuildGradle) or die "$! $appBuildGradle";
while(<$fh>){
s/[\x0d\x0a]+//g;
s|//.*| |;
if(/versionCode\s*=\s*(\S+)/){
my $a = $1;
$a =~ s/[\s"]+//g;
$code = $a;
}elsif( /versionName\s*=\s*(\S+)/ ){
my $a = $1;
$a =~ s/[\s"]+//g;
$name = $a;
}
}
close($fh) or die "$! $appBuildGradle";
$code or die "missing versionCode in $appBuildGradle";
$name or die "missing versionCode in $appBuildGradle";
return ($code,$name);
}
my ($versionCode,$versionName) = getVersion();
my $branch = getBranch() or die "missing git branch";
my $date = getDate() or die "missing date";
cmd "mkdir -p _apk";
for(
["fcm","app/build/outputs/apk/fcm/release/app-fcm-release.apk"],
["noFcm","app/build/outputs/apk/nofcm/release/app-nofcm-release.apk"],
){
my($flavor,$srcPath)=@$_;
(-f $srcPath) or die "not found: $srcPath";
my $dstName= "SubwayTooter-$branch-$flavor-$versionCode-$versionName-$date.apk";
cmd "mv $srcPath _apk/$dstName";
}
cmd "ls -lt _apk/SubwayTooter*.apk |head -n 2";