2026-08-02 13:19:24 -05:00
|
|
|
|
#!/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) ---
|
2026-08-02 13:22:36 -05:00
|
|
|
|
# `sort -V` so 9.x doesn't outrank 10.x the way plain lexicographic would.
|
2026-08-02 13:19:24 -05:00
|
|
|
|
local best=""
|
2026-08-02 13:22:36 -05:00
|
|
|
|
while IFS= read -r d; do
|
|
|
|
|
|
[ -n "$d" ] || continue
|
2026-08-02 13:19:24 -05:00
|
|
|
|
case "$(sed -n 's/^Pkg.Revision *= *//p' "$d/source.properties" 2>/dev/null)" in
|
|
|
|
|
|
*beta*|*rc*|*canary*) continue ;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
best="$d"
|
2026-08-02 13:22:36 -05:00
|
|
|
|
done < <(find "$sdk/ndk" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort -V)
|
2026-08-02 13:19:24 -05:00
|
|
|
|
ndk="$best"
|
|
|
|
|
|
if [ -z "$ndk" ]; then
|
|
|
|
|
|
echo "android-env: no stable NDK under $sdk/ndk (run ./scripts/android-setup.sh)" >&2
|
|
|
|
|
|
return 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2026-10-16 22:39:36 -05:00
|
|
|
|
# --- JDK: Gradle 9.6 / AGP 9 run on 17 through 25 (25 is the newest tested).
|
|
|
|
|
|
# Prefer Studio's bundled JBR, then the newest system JDK in that range.
|
2026-08-02 13:19:24 -05:00
|
|
|
|
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 \
|
2026-10-16 22:39:36 -05:00
|
|
|
|
$(ls -d /usr/lib/jvm/* 2>/dev/null | sort -rV)
|
2026-08-02 13:19:24 -05:00
|
|
|
|
do
|
2026-10-16 22:08:47 -05:00
|
|
|
|
[ -x "$d/bin/javac" ] || continue
|
2026-10-16 22:39:36 -05:00
|
|
|
|
local v
|
|
|
|
|
|
v="$(sed -n 's/^JAVA_VERSION="\([0-9]*\).*/\1/p' "$d/release" 2>/dev/null)"
|
|
|
|
|
|
if [ -n "$v" ] && [ "$v" -ge 17 ] && [ "$v" -le 25 ]; then jdk="$d"; break; fi
|
2026-08-02 13:19:24 -05:00
|
|
|
|
done
|
|
|
|
|
|
if [ -z "$jdk" ]; then
|
2026-10-16 22:39:36 -05:00
|
|
|
|
echo "android-env: no JDK 17–25 found (sudo dnf install java-25-openjdk-devel)" >&2
|
2026-08-02 13:19:24 -05:00
|
|
|
|
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
|
2026-10-16 22:08:47 -05:00
|
|
|
|
_mtgc_rc=$?
|
2026-08-02 13:19:24 -05:00
|
|
|
|
unset -f _mtgc_android_env
|
2026-10-16 22:08:47 -05:00
|
|
|
|
# Pass the failure on so `set -e` scripts that source this stop here.
|
|
|
|
|
|
return "$_mtgc_rc" 2>/dev/null || exit "$_mtgc_rc"
|