81 lines
2.3 KiB
Bash
Executable File
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"
|