Simplify emulator lifecycle and add ARM64 support in build.sh
This commit is contained in:
parent
0467ff1f68
commit
c7e754042c
81
build.sh
81
build.sh
@ -28,6 +28,10 @@ PACKAGE_NAME=org.isoron.uhabits
|
|||||||
SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager"
|
SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager"
|
||||||
VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g')
|
VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g')
|
||||||
BOOT_TIMEOUT=360
|
BOOT_TIMEOUT=360
|
||||||
|
case "$(uname -m)" in
|
||||||
|
arm64|aarch64) ARCH="arm64-v8a" ;;
|
||||||
|
*) ARCH="x86_64" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@ -140,11 +144,12 @@ android_accept_licenses() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android_setup() {
|
android_setup() {
|
||||||
API=$1
|
local API=$1
|
||||||
AVDNAME=${AVD_PREFIX}${API}
|
local AVDNAME=${AVD_PREFIX}${API}
|
||||||
|
|
||||||
(
|
(
|
||||||
flock 10
|
flock 10
|
||||||
|
|
||||||
log_info "Stopping Android emulator..."
|
log_info "Stopping Android emulator..."
|
||||||
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
|
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
|
||||||
pkill -9 -f ${AVDNAME}
|
pkill -9 -f ${AVDNAME}
|
||||||
@ -154,57 +159,53 @@ android_setup() {
|
|||||||
run $AVDMANAGER delete avd --name $AVDNAME
|
run $AVDMANAGER delete avd --name $AVDNAME
|
||||||
|
|
||||||
log_info "Creating new Android virtual device (API $API)..."
|
log_info "Creating new Android virtual device (API $API)..."
|
||||||
run $SDKMANAGER --install "system-images;android-$API;google_apis;x86_64" || return 1
|
run $SDKMANAGER --install "system-images;android-$API;google_apis;$ARCH" || return 1
|
||||||
run $AVDMANAGER create avd \
|
run $AVDMANAGER create avd \
|
||||||
--name $AVDNAME \
|
--name $AVDNAME \
|
||||||
--package "system-images;android-$API;google_apis;x86_64" \
|
--package "system-images;android-$API;google_apis;$ARCH" \
|
||||||
--device "Nexus 4" || return 1
|
--device "Nexus 4" || return 1
|
||||||
|
|
||||||
flock -u 10
|
flock -u 10
|
||||||
) 10>/tmp/uhabitsTest.lock
|
) 10>/tmp/uhabitsTest.lock
|
||||||
|
|
||||||
log_info "Launching emulator..."
|
|
||||||
EMULATOR_LOG="build/emulator-${API}.log"
|
|
||||||
$EMULATOR \
|
|
||||||
-avd $AVDNAME \
|
|
||||||
-port 6${API}0 \
|
|
||||||
1>"$EMULATOR_LOG" 2>&1 &
|
|
||||||
|
|
||||||
log_info "Waiting for emulator to boot..."
|
|
||||||
export ADB="$ADB -s emulator-6${API}0"
|
|
||||||
run timeout $BOOT_TIMEOUT $ADB wait-for-device shell 'while [[ -z "$(getprop sys.boot_completed)" ]]; do echo Waiting...; sleep 1; done; input keyevent 82'
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
log_error "Emulator failed to boot after $BOOT_TIMEOUT seconds."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "Saving snapshot..."
|
|
||||||
run $ADB emu avd snapshot save fresh-install
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android_boot_attempt() {
|
android_launch() {
|
||||||
API=$1
|
local API=$1
|
||||||
AVDNAME=${AVD_PREFIX}${API}
|
local AVDNAME=${AVD_PREFIX}${API}
|
||||||
|
local PORT=6${API}0
|
||||||
|
|
||||||
log_info "Stopping Android emulator..."
|
log_info "Stopping Android emulator..."
|
||||||
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
|
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
|
||||||
pkill -9 -f ${AVDNAME}
|
pkill -9 -f ${AVDNAME}
|
||||||
done
|
done
|
||||||
|
|
||||||
log_info "Launching emulator..."
|
log_info "Launching emulator (API $API)..."
|
||||||
EMULATOR_LOG="build/emulator-${API}.log"
|
local EMULATOR_LOG="build/emulator-${API}.log"
|
||||||
$EMULATOR \
|
$EMULATOR \
|
||||||
-avd $AVDNAME \
|
-avd $AVDNAME \
|
||||||
-port 6${API}0 \
|
-port $PORT \
|
||||||
-snapshot fresh-install \
|
-no-snapshot \
|
||||||
-no-snapshot-save \
|
|
||||||
-wipe-data \
|
|
||||||
1>"$EMULATOR_LOG" 2>&1 &
|
1>"$EMULATOR_LOG" 2>&1 &
|
||||||
|
|
||||||
|
export ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${PORT}"
|
||||||
|
|
||||||
log_info "Waiting for emulator to boot..."
|
log_info "Waiting for emulator to boot..."
|
||||||
export ADB="$ADB -s emulator-6${API}0"
|
timeout $BOOT_TIMEOUT $ADB wait-for-device shell \
|
||||||
sleep 5
|
'while [[ -z "$(getprop sys.boot_completed)" ]]; do sleep 1; done; input keyevent 82' &
|
||||||
run timeout $BOOT_TIMEOUT $ADB wait-for-device shell 'while [[ -z "$(getprop sys.boot_completed)" ]]; do echo Waiting...; sleep 1; done; input keyevent 82'
|
local WAIT_PID=$!
|
||||||
|
|
||||||
|
while kill -0 $WAIT_PID 2>/dev/null; do
|
||||||
|
if grep -q "FATAL" "$EMULATOR_LOG" 2>/dev/null; then
|
||||||
|
log_error "Emulator crashed:"
|
||||||
|
grep "FATAL" "$EMULATOR_LOG"
|
||||||
|
kill $WAIT_PID 2>/dev/null
|
||||||
|
wait $WAIT_PID 2>/dev/null
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
wait $WAIT_PID
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
log_error "Emulator failed to boot after $BOOT_TIMEOUT seconds."
|
log_error "Emulator failed to boot after $BOOT_TIMEOUT seconds."
|
||||||
return 1
|
return 1
|
||||||
@ -219,16 +220,6 @@ android_boot_attempt() {
|
|||||||
|
|
||||||
log_info "Acquiring wake lock..."
|
log_info "Acquiring wake lock..."
|
||||||
run $ADB shell 'echo android-test > /sys/power/wake_lock' || return 1
|
run $ADB shell 'echo android-test > /sys/power/wake_lock' || return 1
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
android_boot() {
|
|
||||||
for attempt in {1..5}; do
|
|
||||||
android_boot_attempt $1 && return 0
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
log_error "Too many failed attempts. Aborting."
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# shellcheck disable=SC2016
|
# shellcheck disable=SC2016
|
||||||
@ -236,7 +227,7 @@ android_test() {
|
|||||||
API=$1
|
API=$1
|
||||||
AVDNAME=${AVD_PREFIX}${API}
|
AVDNAME=${AVD_PREFIX}${API}
|
||||||
|
|
||||||
android_boot $API || return 1
|
android_launch $API || return 1
|
||||||
|
|
||||||
if [ -n "$RELEASE" ]; then
|
if [ -n "$RELEASE" ]; then
|
||||||
log_info "Installing release APK..."
|
log_info "Installing release APK..."
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user