#!/bin/bash # File origin : https://github.com/amrsa1/Android-Emulator-image/blob/main/start_emu_headless.sh BL='\033[0;34m' G='\033[0;32m' RED='\033[0;31m' YE='\033[1;33m' NC='\033[0m' # No Color emulator_name="${EMULATOR_NAME}" set -x function check_hardware_acceleration () { if [[ "$HW_ACCEL_OVERRIDE" != "" ]]; then hw_accel_flag="$HW_ACCEL_OVERRIDE" else if [[ "$OSTYPE" == "darwin"* ]]; then # macOS-specific hardware acceleration check HW_ACCEL_SUPPORT=$(sysctl -a | grep -E -c '(vmx|svm)') else # generic Linux hardware acceleration check HW_ACCEL_SUPPORT=$(grep -E -c '(vmx|svm)' /proc/cpuinfo) fi if [[ $HW_ACCEL_SUPPORT == 0 ]]; then hw_accel_flag="-accel off" else hw_accel_flag="-accel on" fi fi echo "$hw_accel_flag" } hw_accel_flag=$(check_hardware_acceleration) function launch_emulator () { adb devices | grep emulator | cut -f1 | xargs -I {} adb -s "{}" emu kill options="@${emulator_name} -no-window -no-snapshot -noaudio -no-boot-anim -memory 2048 ${hw_accel_flag} -camera-back none -no-metrics" if [[ "$OSTYPE" == *linux* ]]; then echo "${OSTYPE}: emulator ${options} -gpu off" nohup emulator $options -gpu off & fi if [[ "$OSTYPE" == *darwin* ]] || [[ "$OSTYPE" == *macos* ]]; then echo "${OSTYPE}: emulator ${options} -gpu swiftshader_indirect" nohup emulator $options -gpu swiftshader_indirect & fi if [ $? -ne 0 ]; then echo "Error launching emulator" return 1 fi } function check_emulator_status () { printf "${G}==> ${BL}Checking emulator booting up status 🧐${NC}\n" start_time=$(date +%s) spinner=( "⠹" "⠺" "⠼" "⠶" "⠦" "⠧" "⠇" "⠏" ) i=0 # Get the timeout value from the environment variable or use the default value of 300 seconds (5 minutes) timeout=${EMULATOR_TIMEOUT:-300} while true; do result=$(adb shell getprop sys.boot_completed 2>&1) if [ "$result" == "1" ]; then printf "\e[K${G}==> \u2713 Emulator is ready : '$result' ${NC}\n" adb devices -l adb shell input keyevent 82 break elif [ "$result" == "" ]; then printf "${YE}==> Emulator is partially Booted! 😕 ${spinner[$i]} ${NC}\r" else printf "${RED}==> $result, please wait ${spinner[$i]} ${NC}\r" i=$(( (i+1) % 8 )) fi current_time=$(date +%s) elapsed_time=$((current_time - start_time)) if [ $elapsed_time -gt $timeout ]; then printf "${RED}==> Timeout after ${timeout} seconds elapsed 🕛.. ${NC}\n" break fi sleep 4 done }; function disable_animation() { adb shell "settings put global window_animation_scale 0.0" adb shell "settings put global transition_animation_scale 0.0" adb shell "settings put global animator_duration_scale 0.0" }; function hidden_policy() { adb shell "settings put global hidden_api_policy_pre_p_apps 1;settings put global hidden_api_policy_p_apps 1;settings put global hidden_api_policy 1" }; launch_emulator check_emulator_status disable_animation hidden_policy