Reduce the terseness of build.sh

Allowing easier reading and editing
This commit is contained in:
2022-04-15 14:59:48 +01:00
parent 1c488fe457
commit ca643807d2

149
build.sh
View File

@@ -1,5 +1,8 @@
#!/usr/bin/env bash
# Handle any error or die
set -e
THIS_BUILD_DIR=$(dirname "$0")
install_apk=false
run_apk=false
@@ -8,7 +11,7 @@ sign_bundle=false
build_release=true
# Check environment before continuing
if ! $(which adb arch zipalign apksigner jarsigner ndk-build java cmake > /dev/null); then
if ! $(which adb zipalign apksigner jarsigner ndk-build java cmake > /dev/null); then
echo "One of the follow binaries is missing. Check your environment";
echo "adb arch zipalign apksigner jarsigner ndk-build java cmake";
exit 1;
@@ -44,7 +47,7 @@ do
;;
esac
done
shift `expr $OPTIND - 1`
shift $(expr $OPTIND - 1)
if [ "$#" -gt 0 -a "$1" = "release" ]; then
shift
@@ -57,7 +60,7 @@ if [ "$#" -gt 0 -a "$1" = "debug" ]; then
export NDK_DEBUG=1
fi
if [ "$#" -gt 0 -a "$1" '!=' "-h" ]; then
if [ "$#" -gt 0 ]; then
echo "Switching build target to $1"
if [ -e project/jni/application/$1 ]; then
rm -f project/jni/application/src
@@ -65,25 +68,31 @@ if [ "$#" -gt 0 -a "$1" '!=' "-h" ]; then
else
echo "Error: no app $1 under project/jni/application"
echo "Available applications:"
cd project/jni/application
pushd project/jni/application
for f in *; do
if [ -e "$f/AndroidAppSettings.cfg" ]; then
echo "$f"
fi
done
popd
exit 1
fi
shift
fi
if [ -e project/local.properties ] && \
grep "package `grep AppFullName= AndroidAppSettings.cfg | sed 's/.*=//'`;" project/src/Globals.java > /dev/null 2>&1 && \
[ "`readlink AndroidAppSettings.cfg`" -ot "project/src/Globals.java" ] && \
[ -z "`find project/java/* project/javaSDL2/* project/jni/sdl2/android-project/app/src/main/java/org/libsdl/app/* project/AndroidManifestTemplate.xml -cnewer project/src/Globals.java`" ]
if ! [ -e project/local.properties ] && \
grep "package $(grep -Po 'AppFullName\=\K[.[:alnum:]]+' AndroidAppSettings.cfg);" project/src/Globals.java > /dev/null 2>&1 && \
[ "$(readlink AndroidAppSettings.cfg)" -ot "project/src/Globals.java" ] && \
[ -z "$(find project/java/* \
project/javaSDL2/* \
project/jni/sdl2/android-project/app/src/main/java/org/libsdl/app/* \
project/AndroidManifestTemplate.xml \
-cnewer \
project/src/Globals.java \
)"
];
then
true
else
./changeAppSettings.sh -a || exit 1
./changeAppSettings.sh -a
sleep 1
touch project/src/Globals.java
fi
@@ -93,7 +102,7 @@ if [ -z "$NCPU" ]; then
NCPU=8
if uname -s | grep -i "linux" > /dev/null ; then
MYARCH=linux-x86_64
NCPU=`cat /proc/cpuinfo | grep -c -i processor`
NCPU=$(cat /proc/cpuinfo | grep -c -i processor)
fi
if uname -s | grep -i "darwin" > /dev/null ; then
MYARCH=darwin-x86_64
@@ -105,60 +114,72 @@ fi
export BUILD_NUM_CPUS=$NCPU
# Fix Gradle compilation error
[ -z "$ANDROID_NDK_HOME" ] && export ANDROID_NDK_HOME="`which ndk-build | sed 's@/ndk-build@@'`"
[ -z "$ANDROID_NDK_HOME" ] && export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')"
[ -x project/jni/application/src/AndroidPreBuild.sh ] && {
if [ -x project/jni/application/src/AndroidPreBuild.sh ]; then
pushd project/jni/application/src
./AndroidPreBuild.sh || { echo "AndroidPreBuild.sh returned with error" ; exit 1 ; }
./AndroidPreBuild.sh
popd
}
fi
grep -q 'CustomBuildScript=y' ./AndroidAppSettings.cfg && {
ndk-build -C project -j$NCPU V=1 CUSTOM_BUILD_SCRIPT_FIRST_PASS=1 NDK_APP_STRIP_MODE=none || exit 1
make -C project/jni/application -f CustomBuildScript.mk || exit 1
}
if grep -q 'CustomBuildScript=y' ./AndroidAppSettings.cfg; then
ndk-build -C project -j$NCPU V=1 CUSTOM_BUILD_SCRIPT_FIRST_PASS=1 NDK_APP_STRIP_MODE=none
make -C project/jni/application -f CustomBuildScript.mk
fi
ndk-build -C project -j$NCPU V=1 NDK_APP_STRIP_MODE=none && \
./copyAssets.sh && cd project && \
{ if $build_release ; then \
./gradlew assembleRelease || exit 1 ; \
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
pushd jni/application/src ; \
./AndroidPostBuild.sh ${THIS_BUILD_DIR}/project/app/build/outputs/apk/release/app-release-unsigned.apk || exit 1 ; \
popd ; \
} || exit 1 ; \
../copyAssets.sh pack-binaries app/build/outputs/apk/release/app-release-unsigned.apk ; \
rm -f app/build/outputs/apk/release/app-release.apk ; \
zipalign -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk ; \
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || exit 1 ; \
else \
./gradlew assembleDebug || exit 1 ; \
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
pushd jni/application/src ; \
./AndroidPostBuild.sh ${THIS_BUILD_DIR}/project/app/build/outputs/apk/debug/app-debug.apk || exit 1 ; \
popd ; \
} || exit 1 ; \
mkdir -p app/build/outputs/apk/release ; \
../copyAssets.sh pack-binaries app/build/outputs/apk/debug/app-debug.apk ; \
rm -f app/build/outputs/apk/release/app-release.apk ; \
zipalign -p 4 app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk ; \
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || exit 1 ; \
fi ; } && \
{ if $sign_apk; then pushd .. && ./sign.sh && popd ; else true ; fi ; } && \
{ if $sign_bundle; then pushd .. && ./signBundle.sh && popd ; else true ; fi ; } && \
{ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \
{ if $sign_apk; then \
APPNAME=`grep AppName ../AndroidAppSettings.cfg | sed 's/.*=//' | tr -d '"' | tr " '/" '---'` ; \
APPVER=`grep AppVersionName ../AndroidAppSettings.cfg | sed 's/.*=//' | tr -d '"' | tr " '/" '---'` ; \
adb install -r ../$APPNAME-$APPVER.apk ; \
else \
adb install -r app/build/outputs/apk/release/app-release.apk ; \
fi ; } ; \
true ; } && \
{ $run_apk && { \
ActivityName="`grep AppFullName ../AndroidAppSettings.cfg | sed 's/.*=//'`/.MainActivity" ; \
RUN_APK="adb shell am start -n $ActivityName" ; \
echo "Running $ActivityName on the USB-connected device:" ; \
echo "$RUN_APK" ; \
eval $RUN_APK ; } ; \
true ; } || exit 1
ndk-build -C project -j$NCPU V=1 NDK_APP_STRIP_MODE=none
./copyAssets.sh
pushd project
if $build_release ; then
./gradlew assembleRelease
if [ ! -x jni/application/src/AndroidPostBuild.sh ]; then
pushd jni/application/src
./AndroidPostBuild.sh ${THIS_BUILD_DIR}/project/app/build/outputs/apk/release/app-release-unsigned.apk
popd
fi
../copyAssets.sh pack-binaries app/build/outputs/apk/release/app-release-unsigned.apk
rm -f app/build/outputs/apk/release/app-release.apk
zipalign -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk
else
./gradlew assembleDebug
if [ ! -x jni/application/src/AndroidPostBuild.sh ]; then
pushd jni/application/src
./AndroidPostBuild.sh ${THIS_BUILD_DIR}/project/app/build/outputs/apk/debug/app-debug.apk
popd
fi
mkdir -p app/build/outputs/apk/release
../copyAssets.sh pack-binaries app/build/outputs/apk/debug/app-debug.apk
rm -f app/build/outputs/apk/release/app-release.apk
zipalign -p 4 app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk
fi
if $sign_apk; then
pushd ..
./sign.sh
popd
fi
if $sign_bundle; then
pushd ..
./signBundle.sh
popd
fi
if $install_apk && [ -n "$(adb devices | tail -n +2)" ]; then
if $sign_apk; then
APPNAME=$(grep AppName ../AndroidAppSettings.cfg | sed 's/.*=//' | tr -d '"' | tr " '/" '---')
APPVER=$(grep AppVersionName ../AndroidAppSettings.cfg | sed 's/.*=//' | tr -d '"' | tr " '/" '---')
adb install -r ../$APPNAME-$APPVER.apk ;
else
adb install -r app/build/outputs/apk/release/app-release.apk
fi
fi
if $run_apk; then
ActivityName="$(grep AppFullName ../AndroidAppSettings.cfg | sed 's/.*=//')/.MainActivity"
RUN_APK="adb shell am start -n $ActivityName"
echo "Running $ActivityName on the USB-connected device:"
echo "$RUN_APK"
eval $RUN_APK
fi