diff --git a/README_CUSTOM_CONFIG.md b/README_CUSTOM_CONFIG.md index 4a721f2..07cb0b1 100644 --- a/README_CUSTOM_CONFIG.md +++ b/README_CUSTOM_CONFIG.md @@ -63,11 +63,6 @@ If you want to add more arguments for running emulator, you can ***pass an envir docker run --privileged -d -p 6080:6080 -p 4723:4723 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" -e EMULATOR_ARGS="-no-snapshot-load -partition-size 512" --name android-container budtmo/docker-android-x86-8.1 ``` -Appium Test Distribution (ATD) ------------------------------- - -You can enable [ATD](https://github.com/AppiumTestDistribution/AppiumTestDistribution) by passing environment variable ATD=true and bind the port to the host, e.g. -p 4567:4567 - SaltStack --------- diff --git a/docker/Emulator_x86 b/docker/Emulator_x86 index 67b3cc6..2ebfd1d 100644 --- a/docker/Emulator_x86 +++ b/docker/Emulator_x86 @@ -1,4 +1,4 @@ -FROM appium/appium:v1.22.3-p0 +FROM appium/appium:v1.22.3-p1 LABEL maintainer "Budi Utomo " @@ -183,7 +183,7 @@ EXPOSE 4723 6080 5554 5555 #====================== # Add Emulator Devices #====================== -COPY devices /root/devices +COPY devices ${ANDROID_HOME}/devices #=================== # Run docker-appium @@ -195,6 +195,6 @@ RUN chmod -R +x /root/src && chmod +x /root/supervisord.conf HEALTHCHECK --interval=2s --timeout=40s --retries=1 \ CMD timeout 40 adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done' -RUN ln -s /root/emulator/emulator /usr/bin/ +RUN ln -s ${ANDROID_HOME}/emulator/emulator /usr/bin/ CMD /usr/bin/supervisord --configuration supervisord.conf diff --git a/docker/Genymotion b/docker/Genymotion index 81ceb56..f3c2591 100644 --- a/docker/Genymotion +++ b/docker/Genymotion @@ -1,4 +1,4 @@ -FROM appium/appium:v1.22.3-p0 +FROM appium/appium:v1.22.3-p1 LABEL maintainer "Budi Utomo " @@ -168,5 +168,5 @@ EXPOSE 4723 6080 5555 COPY src /root/src COPY supervisord.conf /root/ RUN chmod -R +x /root/src && chmod +x /root/supervisord.conf /root/geny_start.sh -RUN gmsaas config set android-sdk-path /root +RUN gmsaas config set android-sdk-path ${ANDROID_HOME} CMD ["./geny_start.sh"] diff --git a/docker/Real_device b/docker/Real_device index 60a46f8..55afbc2 100644 --- a/docker/Real_device +++ b/docker/Real_device @@ -1,4 +1,4 @@ -FROM appium/appium:v1.22.3-p0 +FROM appium/appium:v1.22.3-p1 LABEL maintainer "Budi Utomo " diff --git a/src/app.py b/src/app.py index b853e3f..2177882 100644 --- a/src/app.py +++ b/src/app.py @@ -98,12 +98,12 @@ def prepare_avd(device: str, avd_name: str, dp_size: str): profile_dst_path = os.path.join(ROOT, '.android', 'devices.xml') if 'samsung' in device.lower(): # profile file name = skin name - profile_src_path = os.path.join(ROOT, 'devices', 'profiles', '{profile}.xml'.format(profile=skin_name)) + profile_src_path = os.path.join(ANDROID_HOME, 'devices', 'profiles', '{profile}.xml'.format(profile=skin_name)) logger.info('Hardware profile resource path: {rsc}'.format(rsc=profile_src_path)) logger.info('Hardware profile destination path: {dst}'.format(dst=profile_dst_path)) symlink_force(profile_src_path, profile_dst_path) - avd_path = '/'.join([ANDROID_HOME, 'android_emulator']) + avd_path = '/'.join([ROOT, 'android_emulator']) creation_cmd = 'avdmanager create avd -f -n {name} -b {img_type}/{sys_img} -k "system-images;android-{api_lvl};' \ '{img_type};{sys_img}" -d {device} -p {path}'.format(name=avd_name, img_type=IMG_TYPE, sys_img=SYS_IMG, @@ -226,10 +226,10 @@ def run(): if is_first_run: logger.info('Emulator was not previously initialized. Preparing a new one...') - cmd = 'emulator/emulator @{name} -gpu swiftshader_indirect -accel on -wipe-data -writable-system -verbose {custom_args}'.format(name=avd_name, custom_args=custom_args) + cmd = 'emulator @{name} -gpu swiftshader_indirect -accel on -wipe-data -writable-system -verbose {custom_args}'.format(name=avd_name, custom_args=custom_args) else: logger.info('Using previously initialized AVD...') - cmd = 'emulator/emulator @{name} -gpu swiftshader_indirect -accel on -verbose -writable-system {custom_args}'.format(name=avd_name, custom_args=custom_args) + cmd = 'emulator @{name} -gpu swiftshader_indirect -accel on -verbose -writable-system {custom_args}'.format(name=avd_name, custom_args=custom_args) appium = convert_str_to_bool(str(os.getenv('APPIUM', False))) if appium: diff --git a/src/atd.sh b/src/atd.sh deleted file mode 100755 index 35111d7..0000000 --- a/src/atd.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -if [ "$ATD" = true ]; then - echo "Starting ATD..." - java -jar /root/RemoteAppiumManager.jar -DPort=4567 -fi diff --git a/src/utils.sh b/src/utils.sh index eed4b56..e29b5b3 100755 --- a/src/utils.sh +++ b/src/utils.sh @@ -10,7 +10,7 @@ function wait_emulator_to_be_ready () { boot_completed=true else sleep 1 - fi + fi done } @@ -52,7 +52,7 @@ function enable_proxy_if_needed () { adb shell "content update --uri content://telephony/carriers --bind proxy:s:"0.0.0.0" --bind port:s:"0000" --where "mcc=310" --where "mnc=260"" sleep 5 adb shell "content update --uri content://telephony/carriers --bind proxy:s:"${p[0]}" --bind port:s:"${p[1]}" --where "mcc=310" --where "mnc=260"" - + if [ ! -z "${HTTP_PROXY_USER}" ]; then sleep 2 adb shell "content update --uri content://telephony/carriers --bind user:s:"${HTTP_PROXY_USER}" --where "mcc=310" --where "mnc=260"" @@ -61,7 +61,7 @@ function enable_proxy_if_needed () { sleep 2 adb shell "content update --uri content://telephony/carriers --bind password:s:"${HTTP_PROXY_PASSWORD}" --where "mcc=310" --where "mnc=260"" fi - + adb unroot # Mobile data need to be restarted for Android 10 or higher @@ -77,8 +77,69 @@ function enable_proxy_if_needed () { fi } +function check_emulator_popups() { + echo "Waiting for device..." + wait_emulator_to_be_ready + $ANDROID_HOME/platform-tools/adb wait-for-device shell true + + EMU_BOOTED=0 + n=0 + first_launcher=1 + echo 1 > /tmp/failed + while [[ $EMU_BOOTED = 0 ]];do + echo "Test for current focus" + CURRENT_FOCUS=`$ANDROID_HOME/platform-tools/adb shell dumpsys window 2>/dev/null | grep -i mCurrentFocus` + echo "Current focus: ${CURRENT_FOCUS}" + case $CURRENT_FOCUS in + *"Launcher"*) + if [[ $first_launcher == 1 ]]; then + echo "Launcher seems to be ready, wait 10 sec for another popup..." + sleep 10 + first_launcher=0 + else + echo "Launcher is ready, Android boot completed" + EMU_BOOTED=1 + rm /tmp/failed + fi + ;; + *"Not Responding: com.android.systemui"*) + echo "Dismiss System UI isn't responding alert" + adb shell su root 'kill $(pidof com.android.systemui)' + first_launcher=1 + ;; + *"Not Responding: com.google.android.gms"*) + echo "Dismiss GMS isn't responding alert" + adb shell input keyevent KEYCODE_ENTER + first_launcher=1 + ;; + *"Not Responding: system"*) + echo "Dismiss Process system isn't responding alert" + adb shell input keyevent KEYCODE_ENTER + first_launcher=1 + ;; + *"ConversationListActivity"*) + echo "Close Messaging app" + adb shell input keyevent KEYCODE_ENTER + first_launcher=1 + ;; + *) + n=$((n + 1)) + echo "Waiting Android to boot 10 sec ($n)..." + sleep 10 + if [ $n -gt 60 ]; then + echo "Android Emulator does not start in 10 minutes" + exit 2 + fi + ;; + esac + done + echo "Android Emulator started." +} + change_language_if_needed sleep 1 enable_proxy_if_needed sleep 1 install_google_play +sleep 1 +check_emulator_popups diff --git a/supervisord.conf b/supervisord.conf index 63a6b10..9e874c5 100644 --- a/supervisord.conf +++ b/supervisord.conf @@ -42,13 +42,6 @@ stdout_logfile=%(ENV_LOG_PATH)s/screen-copy.stdout.log stderr_logfile=%(ENV_LOG_PATH)s/screen-copy.stderr.log priority=3 -[program:atd] -command=./src/atd.sh -autorestart=false -stdout_logfile=%(ENV_LOG_PATH)s/atd.stdout.log -stderr_logfile=%(ENV_LOG_PATH)s/atd.stderr.log -priority=4 - [program:docker-appium] command=./src/appium.sh autorestart=false @@ -64,7 +57,7 @@ stderr_logfile=%(ENV_LOG_PATH)s/video-recording.stderr.log priority=4 [program:adb-utils] -command=./src/utils.sh +command=bash ./src/utils.sh autorestart=false stdout_logfile=%(ENV_LOG_PATH)s/adb-utils.stdout.log stderr_logfile=%(ENV_LOG_PATH)s/adb-utils.stderr.log