#!/usr/bin/env bash # # android-env.sh — export the environment the Android build needs. # # SOURCE this, don't execute it: # # source scripts/android-env.sh # cargo tauri android dev --open # # Everything is auto-detected, so there are no machine-specific paths to keep in # sync. Run ./scripts/android-setup.sh first to install the pieces. _mtgc_android_env() { local sdk ndk jdk # --- SDK --- sdk="${ANDROID_HOME:-$HOME/Android/Sdk}" if [ ! -d "$sdk" ]; then echo "android-env: no Android SDK at $sdk (run ./scripts/android-setup.sh)" >&2 return 1 fi # --- NDK: newest *stable* installed (skip beta/rc/canary) --- # `sort -V` so 9.x doesn't outrank 10.x the way plain lexicographic would. local best="" while IFS= read -r d; do [ -n "$d" ] || continue case "$(sed -n 's/^Pkg.Revision *= *//p' "$d/source.properties" 2>/dev/null)" in *beta*|*rc*|*canary*) continue ;; esac best="$d" done < <(find "$sdk/ndk" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort -V) ndk="$best" if [ -z "$ndk" ]; then echo "android-env: no stable NDK under $sdk/ndk (run ./scripts/android-setup.sh)" >&2 return 1 fi # --- JDK: Gradle/AGP reject very new JDKs. Studio's bundled JBR is preferred, # but newer Studio releases bundle JBR 25, so check each candidate's version. for d in \ "$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/jbr" \ "$HOME/.local/share/JetBrains/Toolbox/apps/android-studio"/*/jbr \ "$HOME/android-studio/jbr" \ /opt/android-studio/jbr \ /usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21-openjdk-* /usr/lib/jvm/temurin-21-jdk* \ /usr/lib/jvm/java-17-openjdk /usr/lib/jvm/java-17-openjdk-* /usr/lib/jvm/temurin-17-jdk* do [ -x "$d/bin/javac" ] || continue case "$(sed -n 's/^JAVA_VERSION="\([0-9]*\).*/\1/p' "$d/release" 2>/dev/null)" in 21 | 17) jdk="$d"; break ;; esac done if [ -z "$jdk" ]; then echo "android-env: no JDK 21/17 found (Gradle rejects newer ones, incl. Studio's JBR 25)" >&2 echo "android-env: sudo dnf install temurin-21-jdk" >&2 return 1 fi export ANDROID_HOME="$sdk" export NDK_HOME="$ndk" export JAVA_HOME="$jdk" # adb/emulator live here; harmless if already present. case ":$PATH:" in *":$sdk/platform-tools:"*) ;; *) export PATH="$sdk/platform-tools:$PATH" ;; esac echo "ANDROID_HOME=$ANDROID_HOME" echo "NDK_HOME=$NDK_HOME" echo "JAVA_HOME=$JAVA_HOME" } _mtgc_android_env _mtgc_rc=$? unset -f _mtgc_android_env # Pass the failure on so `set -e` scripts that source this stop here. return "$_mtgc_rc" 2>/dev/null || exit "$_mtgc_rc"