#!/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"