From ca643807d2680bf5c7ea13779145ab0eee4b5c86 Mon Sep 17 00:00:00 2001 From: Miguel Horta Date: Fri, 15 Apr 2022 14:59:48 +0100 Subject: [PATCH] Reduce the terseness of build.sh Allowing easier reading and editing --- build.sh | 149 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 85 insertions(+), 64 deletions(-) diff --git a/build.sh b/build.sh index 8bb18ab76..68b72ae99 100755 --- a/build.sh +++ b/build.sh @@ -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