#!/bin/sh set -eu SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd) REPO_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd) prefer_java_home() { if command -v /usr/libexec/java_home >/dev/null 2>&1; then /usr/libexec/java_home -v 17 2>/dev/null || true fi } prefer_homebrew_openjdk_17() { for candidate in \ "/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home" \ "/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home" do if [ -x "$candidate/bin/java" ]; then printf '%s\n' "$candidate" return 0 fi done return 1 } prefer_android_studio_jbr() { for candidate in \ "/Applications/Android Studio.app/Contents/jbr/Contents/Home" \ "/Applications/Android Studio Preview.app/Contents/jbr/Contents/Home" do if [ -x "$candidate/bin/java" ]; then printf '%s\n' "$candidate" return 0 fi done return 1 } java_major_version() { "$1/bin/java" -version 2>&1 | awk -F '"' '/version/ { split($2, v, "."); print v[1]; exit }' } SELECTED_JAVA_HOME="" if [ -n "${JAVA_HOME:-}" ] && [ -x "${JAVA_HOME}/bin/java" ]; then CURRENT_MAJOR=$(java_major_version "$JAVA_HOME" || true) if [ "$CURRENT_MAJOR" = "17" ]; then SELECTED_JAVA_HOME="$JAVA_HOME" fi fi if [ -z "$SELECTED_JAVA_HOME" ]; then CANDIDATE=$(prefer_java_home) if [ -n "$CANDIDATE" ] && [ -x "$CANDIDATE/bin/java" ]; then SELECTED_JAVA_HOME="$CANDIDATE" fi fi if [ -z "$SELECTED_JAVA_HOME" ]; then CANDIDATE=$(prefer_homebrew_openjdk_17 || true) if [ -n "$CANDIDATE" ]; then SELECTED_JAVA_HOME="$CANDIDATE" fi fi if [ -z "$SELECTED_JAVA_HOME" ]; then CANDIDATE=$(prefer_android_studio_jbr || true) if [ -n "$CANDIDATE" ]; then SELECTED_JAVA_HOME="$CANDIDATE" fi fi if [ -z "$SELECTED_JAVA_HOME" ]; then cat >&2 <<'EOF' Unable to find a Java 17 runtime for Android builds. Install JDK 17 or Android Studio, then rerun the Android command. You can also export JAVA_HOME to a Java 17 installation manually. EOF exit 1 fi export JAVA_HOME="$SELECTED_JAVA_HOME" export PATH="$JAVA_HOME/bin:$PATH" # Homebrew's standalone `libzip` can shadow the JDK's bundled zip native # library on macOS, which breaks Gradle startup with Inflater.initIDs errors. JAVA_DYLD_PATH="$JAVA_HOME/lib:$JAVA_HOME/lib/server" if [ -n "${DYLD_LIBRARY_PATH:-}" ]; then export DYLD_LIBRARY_PATH="$JAVA_DYLD_PATH:$DYLD_LIBRARY_PATH" else export DYLD_LIBRARY_PATH="$JAVA_DYLD_PATH" fi cd "$REPO_ROOT" exec "$@"