120 lines
2.7 KiB
Bash
Executable File
120 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
MODE="${1:-all}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
failures=0
|
|
warnings=0
|
|
|
|
say() { printf '%s\n' "$*"; }
|
|
ok() { say "[ok] $*"; }
|
|
warn() { say "[warn] $*"; warnings=$((warnings + 1)); }
|
|
fail() { say "[fail] $*"; failures=$((failures + 1)); }
|
|
|
|
need_cmd() {
|
|
local name="$1"
|
|
if command -v "${name}" >/dev/null 2>&1; then
|
|
ok "Found command: ${name}"
|
|
else
|
|
fail "Missing command: ${name}"
|
|
fi
|
|
}
|
|
|
|
sdk_dir_from_local_properties() {
|
|
local lp="${REPO_ROOT}/local.properties"
|
|
[[ -f "${lp}" ]] || return 1
|
|
local raw
|
|
raw="$(grep -E '^sdk\.dir=' "${lp}" | tail -n1 | cut -d'=' -f2- || true)"
|
|
[[ -n "${raw}" ]] || return 1
|
|
|
|
# Gradle escaping uses backslashes. This normalizes common Linux/macOS forms.
|
|
local unescaped="${raw//\\:/:}"
|
|
unescaped="${unescaped//\\\\/\\}"
|
|
printf '%s\n' "${unescaped}"
|
|
return 0
|
|
}
|
|
|
|
detect_sdk_root() {
|
|
if [[ -n "${ANDROID_SDK_ROOT:-}" ]]; then
|
|
printf '%s\n' "${ANDROID_SDK_ROOT}"
|
|
return 0
|
|
fi
|
|
if [[ -n "${ANDROID_HOME:-}" ]]; then
|
|
printf '%s\n' "${ANDROID_HOME}"
|
|
return 0
|
|
fi
|
|
if sdk_dir_from_local_properties >/dev/null 2>&1; then
|
|
sdk_dir_from_local_properties
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
validate_mode() {
|
|
case "${MODE}" in
|
|
build|connected|all) ;;
|
|
*)
|
|
say "Usage: $0 [build|connected|all]"
|
|
exit 2
|
|
;;
|
|
esac
|
|
}
|
|
|
|
check_base_tools() {
|
|
need_cmd java
|
|
need_cmd javac
|
|
}
|
|
|
|
check_connected_tools() {
|
|
need_cmd adb
|
|
}
|
|
|
|
check_sdk() {
|
|
local sdk_root=""
|
|
if sdk_root="$(detect_sdk_root)"; then
|
|
if [[ -d "${sdk_root}" ]]; then
|
|
ok "Android SDK root: ${sdk_root}"
|
|
else
|
|
fail "Android SDK path does not exist: ${sdk_root}"
|
|
fi
|
|
else
|
|
fail "Android SDK root not found. Set ANDROID_SDK_ROOT (or ANDROID_HOME)."
|
|
fi
|
|
|
|
if command -v sdkmanager >/dev/null 2>&1; then
|
|
ok "Found command: sdkmanager"
|
|
else
|
|
warn "sdkmanager not in PATH. bootstrap script can still work if cmdline-tools path is set manually."
|
|
fi
|
|
}
|
|
|
|
check_gradle_wrapper() {
|
|
if [[ -f "${REPO_ROOT}/gradlew" ]]; then
|
|
ok "Found gradle wrapper"
|
|
else
|
|
fail "Missing gradlew in repo root"
|
|
fi
|
|
}
|
|
|
|
validate_mode
|
|
|
|
say "Checking Android environment (${MODE}) for ${REPO_ROOT}"
|
|
check_base_tools
|
|
check_gradle_wrapper
|
|
check_sdk
|
|
|
|
if [[ "${MODE}" == "connected" || "${MODE}" == "all" ]]; then
|
|
check_connected_tools
|
|
fi
|
|
|
|
if [[ "${failures}" -gt 0 ]]; then
|
|
say
|
|
fail "Environment check failed with ${failures} issue(s) and ${warnings} warning(s)."
|
|
exit 1
|
|
fi
|
|
|
|
say
|
|
ok "Environment check passed with ${warnings} warning(s)."
|