| OLD | NEW |
| (Empty) |
| 1 #! /bin/bash | |
| 2 | |
| 3 # Create the Android environment needed by run-tests.py | |
| 4 set -e | |
| 5 ANDROID_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
| 6 . $ANDROID_DIR/config.sh | |
| 7 cd $ANDROID_DIR | |
| 8 | |
| 9 # Download the android emulator and adb | |
| 10 if [ ! -d adt ]; then | |
| 11 wget -c https://dl.google.com/android/adt/adt-bundle-linux-$(uname -p)-2013103
0.zip -O adt.zip | |
| 12 unzip adt.zip > /dev/null | |
| 13 ls -l adt* | |
| 14 mv adt-bundle-linux-* adt | |
| 15 fi | |
| 16 export ADB="$ANDROID_DIR/adt/sdk/platform-tools/adb -e" | |
| 17 export EMULATOR=$ANDROID_DIR/adt/sdk/tools/emulator | |
| 18 export AVD=$ANDROID_DIR/adt/sdk/tools/android | |
| 19 | |
| 20 # Create an Android Virtual Device | |
| 21 if [ ! -e avd ]; then | |
| 22 echo "" | $AVD --verbose create avd -n Android-Chrome --target 1 --force --pat
h avd | |
| 23 fi | |
| 24 | |
| 25 # See if the emulator is running? The emulator occasionally segfaults when | |
| 26 # starting, so we try this in a loop. | |
| 27 while true; do | |
| 28 EMULATOR_RUNNING=false | |
| 29 if [ -e $EMULATOR_PIDFILE ]; then | |
| 30 EMULATOR_PID=$(cat $EMULATOR_PIDFILE) | |
| 31 if kill -0 $EMULATOR_PID ; then | |
| 32 EMULATOR_RUNNING=true | |
| 33 else | |
| 34 rm $EMULATOR_PIDFILE | |
| 35 fi | |
| 36 fi | |
| 37 if $EMULATOR_RUNNING ; then | |
| 38 echo "Android emulator running at $EMULATOR_PID" | |
| 39 else | |
| 40 # The emulator needs an xserver, start xvfb if none are running. | |
| 41 if [ "x$DISPLAY" == x ]; then | |
| 42 export DISPLAY=:99.0 | |
| 43 # xvfb must use 24bits otherwise you get a "failed to create drawable" err
or | |
| 44 # from the emulator. See the following bug for more information | |
| 45 # https://bugs.freedesktop.org/show_bug.cgi?id=62742 | |
| 46 /sbin/start-stop-daemon --start --quiet --pidfile $XVFB_PIDFILE --make-pid
file --background --exec \ | |
| 47 /usr/bin/Xvfb -- :99 +extension GLX -ac -screen 0 1280x1024x24 | |
| 48 sleep 15 | |
| 49 fi | |
| 50 | |
| 51 $ADB kill-server | |
| 52 $ADB start-server | |
| 53 if [ $($ADB devices | wc -l) -gt 2 ]; then | |
| 54 echo "Multiple Android devices found, bailing." | |
| 55 exit 1 | |
| 56 fi | |
| 57 # "-no-snapshot-save -wipe-data" is needed so not state is saved. | |
| 58 # "-gpu on" is needed as Chrome segfaults without a GPU. | |
| 59 /sbin/start-stop-daemon --verbose --start --quiet --pidfile $EMULATOR_PIDFIL
E --make-pidfile --background --exec /bin/bash -- -c \ | |
| 60 "exec $EMULATOR -verbose -gpu on -no-audio -no-boot-anim -partition-size 1
024 -no-snapshot-save -wipe-data @Android-Chrome >> $OLD_PWD/emulator.log 2>&1" | |
| 61 | |
| 62 # The emulator crashes if you access it too fast :/ | |
| 63 sleep 5 | |
| 64 continue | |
| 65 fi | |
| 66 | |
| 67 $ADB wait-for-device shell true | |
| 68 | |
| 69 BOOTED=$($ADB shell getprop sys.boot_completed | sed -e's/[^0-9]*//g') | |
| 70 BOOTANIM=$($ADB shell getprop init.svc.bootanim | sed -e's/[^a-zA-Z]*//g') | |
| 71 echo "Waiting for emulator to boot... Booted? $BOOTED Animation? $BOOTANIM" | |
| 72 | |
| 73 if [ x$BOOTED == x1 -a x$BOOTANIM == xstopped ]; then | |
| 74 | |
| 75 # Make localhost refer to the host machine, not the emulator. | |
| 76 # See http://developer.android.com/tools/devices/emulator.html#emulatornetwo
rking | |
| 77 echo "Redirecting localhost" | |
| 78 $ADB shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system | |
| 79 $ADB shell echo "10.0.2.2 localhost" \> /etc/hosts | |
| 80 | |
| 81 break | |
| 82 else | |
| 83 sleep 5 | |
| 84 fi | |
| 85 done | |
| 86 | |
| 87 # Download and install the chrome apk. | |
| 88 if [ -e Chrome.apk ]; then | |
| 89 CHROME_APK=$ANDROID_DIR/Chrome.apk | |
| 90 CHROME_APP=com.google.android.apps.chrome | |
| 91 CHROME_ACT=.Main | |
| 92 else | |
| 93 if [ ! -e chrome-android/apks/ChromeShell.apk ]; then | |
| 94 LATEST_APK=`curl -s http://commondatastorage.googleapis.com/chromium-browser
-continuous/Android/LAST_CHANGE` | |
| 95 REMOTE_APK=http://commondatastorage.googleapis.com/chromium-browser-continuo
us/Android/$LATEST_APK/chrome-android.zip | |
| 96 wget -c $REMOTE_APK | |
| 97 unzip chrome-android.zip | |
| 98 fi | |
| 99 CHROME_APK=$ANDROID_DIR/chrome-android/apks/ChromeShell.apk | |
| 100 CHROME_APP=org.chromium.chrome.shell | |
| 101 CHROME_ACT=.ChromeShellActivity | |
| 102 fi | |
| 103 | |
| 104 function start_chrome () { | |
| 105 $ADB shell am start -a android.intent.action.MAIN -n $CHROME_APP/$CHROME_ACT -
W | |
| 106 } | |
| 107 | |
| 108 if start_chrome | grep -q "does not exist"; then | |
| 109 $ADB install $CHROME_APK | |
| 110 fi | |
| 111 | |
| 112 # Check the chrome binary actually starts without segfaulting | |
| 113 start_chrome | |
| 114 sleep 2 | |
| 115 if start_chrome | grep -q "its current task has been brought to the front"; then | |
| 116 echo "Chrome seems to have started okay." | |
| 117 else | |
| 118 echo "Chrome seems to have crashed!" | |
| 119 $ADB shell dumpsys activity # FIXME: Need to grep for running Chrome. | |
| 120 exit 1 | |
| 121 fi | |
| 122 | |
| 123 | |
| 124 # Download and start the chromedriver binary | |
| 125 if [ ! -e chromedriver ]; then | |
| 126 # TODO: Use the latest release of chromedriver instead of this custom build on
ce version 3.0 comes out. | |
| 127 # LATEST_CHROMEDRIVER=`curl -s http://chromedriver.storage.googleapis.com/LATE
ST_RELEASE` | |
| 128 # wget -c http://chromedriver.storage.googleapis.com/$LATEST_CHROMEDRIVER/chro
medriver_linux64.zip -O chromedriver.zip | |
| 129 # unzip chromedriver.zip | |
| 130 | |
| 131 # This version of chromedriver was build from the Chromium repository at r2626
39 on 2014-04-09. | |
| 132 wget https://googledrive.com/host/0B6C-LL9qmW-IYVFrdURCMHZlM1U -O chromedriver | |
| 133 chmod 0755 chromedriver | |
| 134 fi | |
| 135 | |
| 136 CHROMEDRIVER_NOTRUNNING=true | |
| 137 if [ -e $CHROMEDRIVER_PIDFILE ]; then | |
| 138 CHROMEDRIVER_PID=$(cat $CHROMEDRIVER_PIDFILE) | |
| 139 if kill -0 $CHROMEDRIVER_PID ; then | |
| 140 echo "Chrome Driver running at $CHROMEDRIVER_PID" | |
| 141 CHROMEDRIVER_NOTRUNNING=false | |
| 142 else | |
| 143 rm $CHROMEDRIVER_PIDFILE | |
| 144 fi | |
| 145 fi | |
| 146 if $CHROMEDRIVER_NOTRUNNING; then | |
| 147 /sbin/start-stop-daemon --verbose --start --quiet --pidfile $CHROMEDRIVER_PIDF
ILE --make-pidfile --background --exec \ | |
| 148 $ANDROID_DIR/chromedriver | |
| 149 sleep 5 | |
| 150 fi | |
| 151 | |
| 152 cd $OLD_PWD | |
| OLD | NEW |