96 lines
2.4 KiB
Bash
96 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
is_java_home_usable() {
|
|
local candidate="${1:-}"
|
|
if [[ -z "$candidate" || ! -x "$candidate/bin/java" || ! -x "$candidate/bin/javac" ]]; then
|
|
return 1
|
|
fi
|
|
local version
|
|
version="$("$candidate/bin/javac" -version 2>&1 | awk '{print $2}' | cut -d. -f1)"
|
|
[[ "$version" =~ ^[0-9]+$ ]] || return 1
|
|
[[ "$version" -ge 17 ]]
|
|
}
|
|
|
|
resolve_java_home_from_path() {
|
|
if ! command -v javac >/dev/null 2>&1; then
|
|
return 1
|
|
fi
|
|
local javac_path candidate
|
|
javac_path="$(readlink -f "$(command -v javac)")"
|
|
candidate="$(cd "$(dirname "$javac_path")/.." && pwd)"
|
|
if is_java_home_usable "$candidate"; then
|
|
printf '%s\n' "$candidate"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
resolve_java_home() {
|
|
if is_java_home_usable "${JAVA_HOME:-}"; then
|
|
printf '%s\n' "$JAVA_HOME"
|
|
return 0
|
|
fi
|
|
if resolve_java_home_from_path >/dev/null 2>&1; then
|
|
resolve_java_home_from_path
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
is_sdk_dir_usable() {
|
|
local candidate="${1:-}"
|
|
[[ -n "$candidate" && -x "$candidate/cmdline-tools/latest/bin/sdkmanager" ]]
|
|
}
|
|
|
|
resolve_sdk_dir() {
|
|
local candidates=(
|
|
"${ANDROID_SDK_ROOT:-}"
|
|
"${ANDROID_HOME:-}"
|
|
"$HOME/Android/Sdk"
|
|
"$HOME/android-sdk"
|
|
"/opt/android-sdk"
|
|
"/usr/lib/android-sdk"
|
|
)
|
|
local candidate
|
|
for candidate in "${candidates[@]}"; do
|
|
if is_sdk_dir_usable "$candidate"; then
|
|
printf '%s\n' "$candidate"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
write_local_properties() {
|
|
local sdk_dir="$1"
|
|
printf 'sdk.dir=%s\n' "$sdk_dir" > "$repo_root/local.properties"
|
|
}
|
|
|
|
JAVA_HOME="$(resolve_java_home)" || {
|
|
echo "Missing usable JDK 17+." >&2
|
|
echo "Install openjdk-17-jdk globally and make it available via JAVA_HOME or PATH." >&2
|
|
return 1 2>/dev/null || exit 1
|
|
}
|
|
|
|
ANDROID_SDK_ROOT="$(resolve_sdk_dir)" || {
|
|
echo "Missing usable Android SDK." >&2
|
|
echo "Expected cmdline-tools/latest/bin/sdkmanager in one of:" >&2
|
|
echo " \$ANDROID_SDK_ROOT, \$ANDROID_HOME, \$HOME/Android/Sdk, \$HOME/android-sdk, /opt/android-sdk, or /usr/lib/android-sdk" >&2
|
|
return 1 2>/dev/null || exit 1
|
|
}
|
|
|
|
export JAVA_HOME
|
|
export ANDROID_SDK_ROOT
|
|
export ANDROID_HOME="$ANDROID_SDK_ROOT"
|
|
export PATH="$JAVA_HOME/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH"
|
|
|
|
write_local_properties "$ANDROID_SDK_ROOT"
|
|
|
|
echo "JAVA_HOME=$JAVA_HOME"
|
|
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
|
|
echo "ANDROID_TOOLCHAIN_ORIGIN=global"
|