Files
utun2/tools/chatgui-android/build.sh
T

81 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")"
export ANDROID_HOME="${ANDROID_HOME:-/home/user/android}"
BUILD_TYPE=Debug
NOINSTALL=0
DEVICE=""
for arg in "$@"; do
case "$arg" in
--release) BUILD_TYPE=Release ;;
noinstall|--no-install) NOINSTALL=1 ;;
--help|-h)
echo "Usage: $0 [--release] [noinstall | DEVICE_SERIAL]"
echo "Default: clean debug build and install on all connected devices."
echo "Release: create the key once with ./create_signing_key.sh; then use --release noinstall."
exit 0
;;
-*) echo "ERROR: Unknown option: $arg. Use --help." >&2; exit 1 ;;
*)
if [[ -n "$DEVICE" ]]; then
echo "ERROR: Only one device serial may be specified." >&2
exit 1
fi
DEVICE="$arg"
;;
esac
done
if [[ "$NOINSTALL" == 1 && -n "$DEVICE" ]]; then
echo "ERROR: Specify either noinstall or a device serial." >&2
exit 1
fi
if [[ "$BUILD_TYPE" == Release && ! -f signing/keystore.properties ]]; then
echo "ERROR: Release signing settings missing. Run ./create_signing_key.sh first." >&2
exit 1
fi
VARIANT="${BUILD_TYPE,,}"
APK="app/build/outputs/apk/$VARIANT/app-$VARIANT.apk"
trap 'echo "ERROR: Android build/install failed at line $LINENO." >&2' ERR
echo "Building $BUILD_TYPE APK..."
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT
if ! ./gradlew clean ":app:assemble$BUILD_TYPE" > "$TMP" 2>&1; then
cat "$TMP"
echo "ERROR: Gradle $BUILD_TYPE build failed." >&2
exit 1
fi
if [[ ! -f "$APK" ]]; then
echo "ERROR: Gradle succeeded but APK not found: $APK" >&2
exit 1
fi
echo "Build OK: $PWD/$APK"
[[ "$NOINSTALL" == 1 ]] && exit 0
if [[ -n "$DEVICE" ]]; then
DEVICES=("$DEVICE")
else
mapfile -t DEVICES < <(adb devices | awk 'NR>1 && $2=="device"{print $1}')
fi
if [ ${#DEVICES[@]} -eq 0 ]; then
echo "No devices connected" >&2
exit 1
fi
echo "Devices (${#DEVICES[@]}):"
i=1
for d in "${DEVICES[@]}"; do
name=$(adb -s "$d" shell getprop ro.product.model 2>/dev/null | tr -d '\r')
[ -z "$name" ] && name=$(adb -s "$d" shell getprop ro.product.marketname 2>/dev/null | tr -d '\r')
echo " $i) $d $name"
i=$((i+1))
done
for d in "${DEVICES[@]}"; do
echo "Installing on $d..."
adb -s "$d" install -r "$APK"
done
echo "Install OK"