Port
This commit is contained in:
99
scripts/with-android-java.sh
Executable file
99
scripts/with-android-java.sh
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user