stk-code_catmod/tools/android_builder.sh

281 lines
6.5 KiB
Bash
Executable File

#!/bin/sh
#
# (C) 2018 Dawid Gan, under the GPLv3
#
# A script that builds Android APKs for all architectures
#
# The script assumes that you know what you are doing. It allows to generate all
# packages for Google Play Store with single command. If you just want to build
# STK for your own use, then use android/make.sh script instead.
export BUILD_TYPE=Beta
export PROJECT_VERSION=git20200827
export PROJECT_CODE=192
export STK_STOREPASS="xxx"
export STK_KEYSTORE="/path/to/stk.keystore"
export STK_ALIAS="alias"
check_error()
{
if [ $? -gt 0 ]; then
echo "Error ocurred."
exit
fi
}
clean()
{
echo "Clean everything"
rm -rf ./android-armv7
rm -rf ./android-aarch64
rm -rf ./android-x86
rm -rf ./android-x86_64
rm -rf ./android/assets
rm -rf ./android-output
cd android
./make.sh clean
cd -
}
init_directories()
{
echo "Init directories"
if [ ! -d "./android-armv7" ]; then
echo "Creating android-armv7 directory"
mkdir android-armv7
cd android-armv7
ln -s ../android/Android.mk
ln -s ../android/AndroidManifest.xml
ln -s ../android/banner.png
ln -s ../android/build.gradle
ln -s ../android/gradle
ln -s ../android/gradlew
ln -s ../android/icon.png
ln -s ../android/icon-dbg.png
ln -s ../android/icon_adaptive_fg.png
ln -s ../android/icon_adaptive_fg-dbg.png
ln -s ../android/make.sh
ln -s ../android/android-ndk
ln -s ../android/android-sdk
ln -s ../android/assets
ln -s ../android/src
cd -
fi
if [ ! -d "./android-aarch64" ]; then
echo "Creating android-aarch64 directory"
cp -a ./android-armv7 ./android-aarch64
fi
if [ ! -d "./android-x86" ]; then
echo "Creating android-x86 directory"
cp -a ./android-armv7 ./android-x86
fi
if [ ! -d "./android-x86_64" ]; then
echo "Creating android-x86_64 directory"
cp -a ./android-armv7 ./android-x86_64
fi
if [ ! -d "./android-output" ]; then
echo "Creating android-output directory"
mkdir ./android-output
fi
}
generate_assets()
{
echo "Generate assets"
if [ -d "./android/assets" ]; then
echo "Assets already found in ./android/assets"
return
fi
cd ./android
DECREASE_QUALITY=0 \
CONVERT_TO_JPG=0 \
ASSETS_PATHS="../android-output/assets-lq/data" \
./generate_assets.sh
if [ ! -f "./assets/files.txt" ]; then
echo "Error: Couldn't generate assets"
return
fi
if [ -f "./assets/data/supertuxkart.git" ]; then
mv "./assets/data/supertuxkart.git" \
"./assets/data/supertuxkart.$PROJECT_VERSION"
sed -i "s/data\/supertuxkart.git/data\/supertuxkart.$PROJECT_VERSION/g" \
"./assets/files.txt"
fi
cd -
}
generate_full_assets()
{
echo "Generate zip file with full assets"
if [ -f "./android-output/stk-assets.zip" ]; then
echo "Full assets already found in ./android-output/stk-assets.zip"
return
fi
cp -a ./android/generate_assets.sh ./android-output/
cd ./android-output/
ONLY_ASSETS=1 \
TRACKS="all" \
TEXTURE_SIZE=512 \
JPEG_QUALITY=95 \
PNG_QUALITY=95 \
PNGQUANT_QUALITY=95 \
SOUND_QUALITY=112 \
SOUND_MONO=0 \
SOUND_SAMPLE=44100 \
OUTPUT_PATH="assets-hq" \
./generate_assets.sh
if [ ! -f "./assets-hq/files.txt" ]; then
echo "Error: Couldn't generate full assets"
return
fi
cd ./assets-hq/data
zip -r ../../stk-assets.zip ./*
cd ../../
rm ./generate_assets.sh
if [ ! -f "./stk-assets.zip" ]; then
echo "Error: Couldn't generate full assets"
return
fi
FULL_ASSETS_SIZE=`du -b ./stk-assets.zip | cut -f1`
sed -i "s/stk_assets_size = .*\;/stk_assets_size = $FULL_ASSETS_SIZE\;/g" \
"../src/utils/download_assets_size.hpp"
cd ../
}
generate_lq_assets()
{
echo "Generate zip file with lq assets"
if [ -f "./android-output/stk-assets-lq.zip" ]; then
echo "Full assets already found in ./android-output/stk-assets-lq..zip"
return
fi
cp -a ./android/generate_assets.sh ./android-output/
cd ./android-output/
ONLY_ASSETS=1 \
OUTPUT_PATH="assets-lq" \
./generate_assets.sh
if [ ! -f "./assets-lq/files.txt" ]; then
echo "Error: Couldn't generate lq assets"
return
fi
cd ./assets-lq/data
zip -r ../../stk-assets-lq.zip ./*
cd ../../
rm ./generate_assets.sh
if [ ! -f "./stk-assets-lq.zip" ]; then
echo "Error: Couldn't generate lq assets"
return
fi
cd ../
}
build_package()
{
export ARCH1=$1
export ARCH2=$2
echo "Build package for $ARCH1"
if [ -f "./android-output/SuperTuxKart-$PROJECT_VERSION-$ARCH1.apk" ]; then
echo "Package for architecture $ARCH1 is already built"
#return
fi
export COMPILE_ARCH=$ARCH1
cd ./android-$ARCH1
./make.sh -j $(($(nproc) + 1))
cd -
if [ ! -f ./android-$ARCH1/build/outputs/apk/release/android-$ARCH1-release.apk ]; then
echo "Error: Couldn't build apk for architecture $ARCH1"
return
fi
if [ ! -f ./android-$ARCH1/build/outputs/bundle/release/android-$ARCH1.aab ]; then
echo "Error: Couldn't build app bundle for architecture $ARCH1"
return
fi
cp ./android-$ARCH1/build/outputs/apk/release/android-$ARCH1-release.apk \
./android-output/SuperTuxKart-$PROJECT_VERSION-$ARCH1.apk
cp ./android-$ARCH1/build/outputs/bundle/release/android-$ARCH1.aab \
./android-output/SuperTuxKart-$PROJECT_VERSION-$ARCH1.aab
cp ./android-$ARCH1/obj/local/$ARCH2/libmain.so \
./android-output/SuperTuxKart-$PROJECT_VERSION-$ARCH1-libmain.so
}
# Handle clean command
if [ ! -z "$1" ] && [ "$1" = "clean" ]; then
clean
exit
fi
#Build packages
init_directories
generate_lq_assets
generate_full_assets
generate_assets
if [ -z "$1" ] || [ "$1" = "armv7" ]; then
build_package armv7 armeabi-v7a
fi
PROJECT_CODE=$(($PROJECT_CODE + 1))
if [ -z "$1" ] || [ "$1" = "aarch64" ]; then
build_package aarch64 arm64-v8a
fi
PROJECT_CODE=$(($PROJECT_CODE + 1))
if [ -z "$1" ] || [ "$1" = "x86" ]; then
build_package x86 x86
fi
PROJECT_CODE=$(($PROJECT_CODE + 1))
if [ -z "$1" ] || [ "$1" = "x86_64" ]; then
build_package x86_64 x86_64
fi