#!/usr/bin/env fish # # android-env.fish — export the environment the Android build needs (fish shell). # # SOURCE this, don't execute it: # # source scripts/android-env.fish # cargo tauri android dev --open # # bash/zsh users want scripts/android-env.sh instead — only the *env* script is # shell-specific, since it has to mutate the calling shell. ./scripts/android-setup.sh # is executed rather than sourced, so it already works from any shell. # # 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. function _mtgc_android_env # --- SDK --- set -l sdk $HOME/Android/Sdk if set -q ANDROID_HOME; and test -n "$ANDROID_HOME" set sdk $ANDROID_HOME end if not test -d $sdk echo "android-env: no Android SDK at $sdk (run ./scripts/android-setup.sh)" >&2 return 1 end # --- NDK: newest *stable* installed (skip beta/rc/canary) --- # `find` rather than a glob: fish raises an error on a wildcard that matches # nothing, and an SDK with no ndk/ directory at all is a normal state here. # `sort -V` so 9.x doesn't outrank 10.x the way plain lexicographic would. set -l ndk "" for d in (find $sdk/ndk -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort -V) set -l rev (sed -n 's/^Pkg.Revision *= *//p' $d/source.properties 2>/dev/null) switch "$rev" case '*beta*' '*rc*' '*canary*' continue end set ndk $d end if test -z "$ndk" echo "android-env: no stable NDK under $sdk/ndk (run ./scripts/android-setup.sh)" >&2 return 1 end # --- JDK: Gradle/AGP reject very new JDKs; prefer Studio's bundled JBR 21 --- # Ordered by preference; globbed locations go through `find` for the same # unmatched-wildcard reason as above. set -l studio $HOME/.local/share/JetBrains/Toolbox/apps/android-studio set -l candidates \ $studio/jbr \ (find $studio -mindepth 2 -maxdepth 2 -type d -name jbr 2>/dev/null | sort -V) \ $HOME/android-studio/jbr \ /opt/android-studio/jbr \ (find /usr/lib/jvm -maxdepth 1 -name 'java-21-openjdk*' 2>/dev/null | sort -V) \ (find /usr/lib/jvm -maxdepth 1 -name 'java-17-openjdk*' 2>/dev/null | sort -V) set -l jdk "" for d in $candidates # Test for javac specifically: a JRE-only or leftover-empty directory # under /usr/lib/jvm must not count. if test -x $d/bin/javac set jdk $d break end end if test -z "$jdk" echo "android-env: no JDK 21/17 found (Gradle rejects the system default)" >&2 return 1 end set -gx ANDROID_HOME $sdk set -gx NDK_HOME $ndk set -gx JAVA_HOME $jdk # adb/emulator live here; harmless if already present. if not contains $sdk/platform-tools $PATH set -gx PATH $sdk/platform-tools $PATH end echo "ANDROID_HOME=$ANDROID_HOME" echo "NDK_HOME=$NDK_HOME" echo "JAVA_HOME=$JAVA_HOME" end _mtgc_android_env set -l _mtgc_ok $status functions -e _mtgc_android_env # Leave the sourced file's exit status reflecting whether detection succeeded. test $_mtgc_ok -eq 0