Last active
January 28, 2025 23:37
-
-
Save c84c/01a38cd7fc84d26b07122716b95e7b62 to your computer and use it in GitHub Desktop.
Script to run Vodafone DreamLab app on Android emulator (Linux)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
# | |
# run_dreamlab_android_emulator.sh | |
# | |
# Script to start Vodafone DreamLab app on Android emulator to run projects | |
# supported by DreamLab. | |
# | |
# Run this script when you want to support cancer research with your Linux PC | |
# and without the limitation of DreamLab app (AC charger connected). | |
# | |
# Before run this script perform this steps: | |
# - Create an Android Virtual Device with pre-installed PlayStore and set name | |
# in my_avd_name variable (eg. my_avd_name="Pixel_4_API_29") | |
# - Start created AVD | |
# - Start Play Store (inserting Google credentials) | |
# - Install Vodafone DreamLab | |
# https://play.google.com/store/apps/details?id=au.com.vodafone.dreamlabapp | |
# - Start Vodafone DreamLab to select a project to support | |
# - Stop emulator | |
# - Adjust my_avd_name and ANDROID_SDK_PATH variables. | |
# - Run this script to support cancer research! | |
# | |
set -e | |
#set -x | |
############################################################################### | |
# MY_AVD_NAMES: read script arguments or set default AVDS | |
# | |
if [ "$#" -eq 0 ]; then | |
MY_AVD_NAMES=("Pixel_4_API_31_1" "Pixel_4_API_31_2" "Pixel_4_API_31_3" "Pixel_4_API_31_4" "Pixel_4_API_31_5" "Pixel_4_API_31_6") | |
else | |
MY_AVD_NAMES=( "$@" ) | |
fi | |
# | |
############################################################################### | |
# ANDROID_SDK_PATH: set Android Sdk path | |
ANDROID_SDK_PATH="$HOME/Android/Sdk" | |
# global vars for emulator | |
EMULATOR_LIB_PATH="$ANDROID_SDK_PATH/emulator/lib64" | |
QT_EMU_LIB="$ANDROID_SDK_PATH/emulator/lib64/qt/lib" | |
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QT_EMU_LIB:$EMULATOR_LIB_PATH" | |
EMULATOR="$ANDROID_SDK_PATH/emulator/qemu/linux-x86_64/qemu-system-x86_64" | |
ADB="$ANDROID_SDK_PATH/platform-tools/adb" | |
TERMINAL="gnome-terminal" | |
if [ ! -z ${HEADLESS+x} ]; then | |
echo "Starting headless mode" | |
OLD_DISPLAY="$DISPLAY" | |
EMULATOR="$EMULATOR-headless" | |
TERMINAL="$TERMINAL --display=$DISPLAY " | |
unset DISPLAY | |
fi | |
echo "INFO: Ensure adb is running ..." | |
$ADB start-server | |
echo "INFO: adb OK" | |
# check for AVD_NAMES already running | |
# Replace array with not started avds | |
NEW_AVD_NAMES=() | |
# check which avd of MY_AVD_NAMES is running | |
for my_avd in ${MY_AVD_NAMES[@]}; do | |
# get AVD name from adb emu shell | |
running=0 | |
for dev_serial in $($ADB devices | grep emulator | cut -f1); do | |
avd_name=$($ADB -s $dev_serial emu avd name | head -1 | dos2unix ) | |
if [[ ! "$my_avd" = "$avd_name" ]]; then | |
continue | |
else | |
echo "WARN: $my_avd already running" | |
running=1 | |
break | |
fi | |
done | |
if [[ "$running" -eq 0 ]]; then | |
# not running: save it | |
NEW_AVD_NAMES+=( "$my_avd" ) | |
fi | |
done | |
for i in ${MY_AVD_NAMES[@]}; do | |
echo "OLD: $i" | |
done | |
for j in ${NEW_AVD_NAMES[@]}; do | |
echo "NEW: $j" | |
done | |
if [[ "${#NEW_AVD_NAMES[@]}" -eq 0 ]]; then | |
# not available devices. exit | |
echo "WARN: Nothing to run. Exiting" | |
exit 0 | |
fi | |
#exit 1 | |
# store PIDs to wait at end | |
EMULATOR_PIDS=() | |
for avd_name in ${NEW_AVD_NAMES[@]}; do | |
echo "INFO: AVD: $avd_name" | |
echo "INFO: Clean pending operations for $avd_name" | |
rm -vf $HOME/.android/avd/$avd_name.avd/*.lock | |
echo "INFO: Starting emulator for $avd_name ..." | |
# -no-snapshot \ | |
# -no-snapshot-load \ | |
# -no-snapshot-save \ | |
$EMULATOR \ | |
-no-snapshot \ | |
-cores 4 \ | |
-memory 2048 \ | |
-netdelay none \ | |
-netfast \ | |
-netspeed full \ | |
-no-boot-anim \ | |
-avd $avd_name \ | |
& | |
# 1>/dev/null & | |
pid=$! | |
EMULATOR_PIDS+=( $pid ) | |
echo "INFO: Emulator $avd_name started with PID $pid" | |
sleep 10 | |
done | |
# get device serial matching avd names | |
DEVICE_SERIALS=() | |
for dev_serial in $($ADB devices | grep emulator | cut -f1); do | |
# wait device is ready | |
echo "INFO: Waiting $dev_serial is ready ..." | |
$ADB -s $dev_serial wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; # input keyevent 82' | |
echo "INFO: $dev_serial is ready" | |
# get AVD name from adb emu shell | |
avd_name=$($ADB -s $dev_serial emu avd name | head -1 | dos2unix ) | |
found=0 | |
for my_avd_name in ${NEW_AVD_NAMES[@]}; do | |
if [[ "$my_avd_name" == "$avd_name" ]] ; then | |
DEVICE_SERIALS+=( $dev_serial ) | |
found=1 | |
break | |
fi | |
done | |
if [[ "$found" -eq 0 ]]; then | |
# not one of our avd/device. skipping | |
continue | |
fi | |
# sleep to ensure network is available | |
sleep 12 | |
# set AC powered | |
echo "INFO: $avd_name: Set AC powered" | |
$ADB -s $dev_serial shell dumpsys battery set ac 1 | |
sleep 5 | |
# set battery charging | |
echo "INFO: $avd_name: Set battery state CHARGING DONE!" | |
$ADB -s $dev_serial shell dumpsys battery set status 3 | |
sleep 5 | |
echo "INFO: $avd_name: Starting Vodafone DreamLab ..." | |
# start au.com.vodafone.dreamlabapp simulating tap | |
$ADB -s $dev_serial shell monkey -p "au.com.vodafone.dreamlabapp" -c "android.intent.category.LAUNCHER" 1 1>/dev/null | |
echo "INFO: $avd_name: Started Vodafone DreamLab!" | |
sleep 10 | |
echo "INFO: $avd_name: Lock screen to decrease CPU usage" | |
$ADB -s $dev_serial shell input keyevent 26 1>/dev/null | |
echo "INFO: $avd_name: Start monitoring" | |
export LD_PRELOAD=/usr/lib64/libfreetype.so.6 | |
$TERMINAL --tab -t "$avd_name top" -- $ADB -s $dev_serial shell top -m 10 -o USER,%CPU,TIME+,%MEM,CMDLINE -s 2 | |
done | |
trap_handler() | |
{ | |
echo "INFO: Exiting tasks ..." | |
# kill emulator | |
for dev_serial in ${DEVICE_SERIALS[@]}; do | |
"$ADB" -s "$dev_serial" emu quit | |
done | |
echo "INFO: Emulators killed" | |
#$ADB kill-server | |
#echo "adb server killed" | |
} | |
# wait SIGINT to kill script | |
echo "Waiting exit signal (Ctrl+c or SIGTERM)..." | |
trap trap_handler SIGINT SIGTERM | |
for pid in ${EMULATOR_PIDS[@]}; do | |
wait $pid | |
done | |
sleep 3 | |
echo "Bye Bye" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment