Reduce the terseness of build.sh
Allowing easier reading and editing
This commit is contained in:
149
build.sh
149
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
|
||||
|
||||
Reference in New Issue
Block a user