Repository navigation
Expand file tree
/
Copy pathbootstrap.sh
More file actions
executable file
·76 lines (68 loc) · 2.79 KB
/
Copy pathbootstrap.sh
File metadata and controls
executable file
·76 lines (68 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env bash
# Idempotent user-space bootstrap: JDK 17 + Android SDK (platform-tools, emulator,
# API 30 x86_64 image) + one AVD named "qa". No root required.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
SDK="$ROOT/sdk"
JDK="$SDK/jdk"
CMDLINE_ZIP_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
JDK_URL="https://api.adoptium.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/eclipse"
# API level is overridable: API=34 ./bootstrap.sh (API 34 has the newer ARM
# translator, needed for arm-only apps such as PixelPilot).
API="${API:-30}"
IMAGE="system-images;android-${API};google_apis;x86_64"
mkdir -p "$SDK"
log() { echo "[bootstrap] $*"; }
# --- JDK 17 ---
if [ ! -x "$JDK/bin/java" ]; then
log "fetching Temurin JDK 17"
wget -q --show-progress -O "$SDK/jdk.tar.gz" "$JDK_URL"
mkdir -p "$JDK"
tar -xzf "$SDK/jdk.tar.gz" -C "$JDK" --strip-components=1
rm -f "$SDK/jdk.tar.gz"
fi
export JAVA_HOME="$JDK"
export PATH="$JAVA_HOME/bin:$PATH"
log "java: $(java -version 2>&1 | head -1)"
# --- cmdline-tools ---
SDKMANAGER="$SDK/cmdline-tools/latest/bin/sdkmanager"
if [ ! -x "$SDKMANAGER" ]; then
log "fetching Android cmdline-tools"
wget -q --show-progress -O "$SDK/cmdline-tools.zip" "$CMDLINE_ZIP_URL"
rm -rf "$SDK/cmdline-tools"
unzip -q "$SDK/cmdline-tools.zip" -d "$SDK"
mkdir -p "$SDK/cmdline-tools-staging"
mv "$SDK/cmdline-tools" "$SDK/cmdline-tools-staging/latest"
mv "$SDK/cmdline-tools-staging" "$SDK/cmdline-tools"
rm -f "$SDK/cmdline-tools.zip"
fi
export ANDROID_SDK_ROOT="$SDK"
export ANDROID_HOME="$SDK"
# --- SDK packages ---
if [ ! -x "$SDK/platform-tools/adb" ] || [ ! -x "$SDK/emulator/emulator" ] \
|| [ ! -d "$SDK/system-images/android-${API}/google_apis/x86_64" ]; then
log "accepting licenses + installing packages (platform-tools, emulator, $IMAGE)"
yes | "$SDKMANAGER" --licenses >/dev/null || true
"$SDKMANAGER" "platform-tools" "emulator" "$IMAGE" "platforms;android-${API}"
fi
log "adb: $("$SDK/platform-tools/adb" --version | head -1)"
log "emulator: $("$SDK/emulator/emulator" -version 2>/dev/null | head -1 || echo n/a)"
# --- AVD ---
AVDMANAGER="$SDK/cmdline-tools/latest/bin/avdmanager"
if ! "$AVDMANAGER" list avd 2>/dev/null | grep -q "Name: qa"; then
log "creating AVD 'qa'"
echo no | "$AVDMANAGER" create avd -n qa -k "$IMAGE" --force
AVD_CONFIG="$HOME/.android/avd/qa.avd/config.ini"
# sensible phone-ish defaults for headless UI automation
{
echo "hw.ramSize=4096"
echo "hw.lcd.width=1080"
echo "hw.lcd.height=1920"
echo "hw.lcd.density=420"
echo "hw.keyboard=yes"
echo "disk.dataPartition.size=8G"
} >> "$AVD_CONFIG"
fi
log "AVD list:"
"$AVDMANAGER" list avd | sed -n '/Name: qa/,/---/p' || true
log "done"