188 lines
5.5 KiB
Bash
Executable File
188 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Handle any error or die
|
|
set -e
|
|
|
|
THIS_BUILD_DIR=$(dirname "$0")
|
|
install_apk=false
|
|
run_apk=false
|
|
sign_apk=false
|
|
sign_bundle=false
|
|
build_release=true
|
|
|
|
# Check environment before continuing
|
|
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;
|
|
fi
|
|
|
|
JAVA_MVERSION=$(java --version 2>&1 | awk 'NR == 1{print $2}' | awk -F . '{print $1}')
|
|
if [ $JAVA_MVERSION -lt 11 ]; then
|
|
echo "Java version equal or above to 11 necessary.";
|
|
exit 2;
|
|
if [ $JAVA_MVERSION -gt 11 ]; then
|
|
echo "Java 11 version is strongly recomended.";
|
|
fi
|
|
fi
|
|
|
|
while getopts "sirqbh" OPT
|
|
do
|
|
case $OPT in
|
|
s) sign_apk=true;;
|
|
i) install_apk=true;;
|
|
r) install_apk=true ; run_apk=true;;
|
|
q) echo "Quick rebuild does not work anymore with Gradle!";;
|
|
b) sign_bundle=true;;
|
|
h)
|
|
echo "Usage: $0 [-s] [-i] [-r] [-q] [debug|release] [app-name]"
|
|
echo " -s: sign .apk file after building"
|
|
echo " -b: sign .aab app bundle file after building"
|
|
echo " -i: install APK file to device after building"
|
|
echo " -r: run APK file on device after building"
|
|
echo " debug: build debug package"
|
|
echo " release: build release package (default)"
|
|
echo " app-name: directory under project/jni/application to be compiled"
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
shift $(expr $OPTIND - 1)
|
|
|
|
if [ "$#" -gt 0 -a "$1" = "release" ]; then
|
|
shift
|
|
build_release=true
|
|
fi
|
|
|
|
if [ "$#" -gt 0 -a "$1" = "debug" ]; then
|
|
shift
|
|
build_release=false
|
|
export NDK_DEBUG=1
|
|
fi
|
|
|
|
if [ "$#" -gt 0 ]; then
|
|
echo "Switching build target to $1"
|
|
if [ -e project/jni/application/$1 ]; then
|
|
rm -f project/jni/application/src
|
|
ln -s "$1" project/jni/application/src
|
|
else
|
|
echo "Error: no app $1 under project/jni/application"
|
|
echo "Available applications:"
|
|
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 -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
|
|
./changeAppSettings.sh -a
|
|
sleep 1
|
|
touch project/src/Globals.java
|
|
fi
|
|
|
|
MYARCH=linux-x86_64
|
|
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)
|
|
fi
|
|
if uname -s | grep -i "darwin" > /dev/null ; then
|
|
MYARCH=darwin-x86_64
|
|
fi
|
|
if uname -s | grep -i "windows" > /dev/null ; then
|
|
MYARCH=windows-x86_64
|
|
fi
|
|
fi
|
|
export BUILD_NUM_CPUS=$NCPU
|
|
|
|
# Fix Gradle compilation error
|
|
if [ -z "$ANDROID_NDK_HOME" ]; then
|
|
export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')"
|
|
fi
|
|
|
|
if [ -x project/jni/application/src/AndroidPreBuild.sh ]; then
|
|
pushd project/jni/application/src
|
|
./AndroidPreBuild.sh
|
|
popd
|
|
fi
|
|
|
|
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
|
|
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
|