# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. #!/bin/bash PROJECT_PATH=$( cd "$( dirname "$0" )/.." && pwd ) function check_devices { # FIXME local devices=`adb devices | awk '/List of devices attached/ { while(getline > 0) { print }}' | grep device` if [ -z "$devices" ] ; then echo "1" else echo "0" fi } function emulate { declare -a avd_list=($(android list avd | grep "Name:" | cut -f 2 -d ":" | xargs)) # we need to start adb-server adb start-server 1>/dev/null # Do not launch an emulator if there is already one running or if a device is attached if [ $(check_devices) == 0 ] ; then return fi local avd_id="1000" #FIXME: hopefully user does not have 1000 AVDs # User has no AVDs if [ ${#avd_list[@]} == 0 ] then echo "You don't have any Android Virtual Devices. Please create at least one AVD." echo "android" fi # User has only one AVD if [ ${#avd_list[@]} == 1 ] then emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[0]} 1> /dev/null 2>&1 & # User has more than 1 AVD elif [ ${#avd_list[@]} -gt 1 ] then while [ -z ${avd_list[$avd_id]} ] do echo "Choose from one of the following Android Virtual Devices [0 to $((${#avd_list[@]}-1))]:" for(( i = 0 ; i < ${#avd_list[@]} ; i++ )) do echo "$i) ${avd_list[$i]}" done read -t 5 -p "> " avd_id # default value if input timeout if [ $avd_id -eq 1000 ] ; then avd_id=0 ; fi done emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[$avd_id]} 1> /dev/null 2>&1 & fi } function clean { ant clean } # has to be used independently and not in conjunction with other commands function log { adb logcat } function run { clean && emulate && wait_for_device && install && launch } function install { declare -a devices=($(adb devices | awk '/List of devices attached/ { while(getline > 0) { print }}' | grep device | cut -f 1)) local device_id="1000" #FIXME: hopefully user does not have 1000 AVDs if [ ${#devices[@]} == 0 ] then # should not reach here. Emulator should launch or device should be attached echo "Emulator not running or device not attached. Could not install debug package" exit 70 fi if [ ${#devices[@]} == 1 ] then export ANDROID_SERIAL=${devices[0]} # User has more than 1 AVD elif [ ${#devices[@]} -gt 1 ] then while [ -z ${devices[$device_id]} ] do echo "Choose from one of the following devices/emulators [0 to $((${#devices[@]}-1))]:" for(( i = 0 ; i < ${#devices[@]} ; i++ )) do echo "$i) ${devices[$i]}" done read -t 5 -p "> " device_id # default value if input timeout if [ $device_id -eq 1000 ] ; then device_id=0 ; fi done export ANDROID_SERIAL=${devices[$device_id]} fi ant debug install } function build { ant debug } function release { ant release } function wait_for_device { local i="0" echo -n "Waiting for device..." while [ $i -lt 300 ] do if [ $(check_devices) -eq 0 ] then break else sleep 1 i=$[i+1] echo -n "." fi done # Device timeout: emulator has not started in time or device not attached if [ $i -eq 300 ] then echo "device timeout!" exit 69 else echo "connected!" fi } function launch { local launch_str=$(java -jar "$PROJECT_PATH"/cordova/appinfo.jar "$PROJECT_PATH"/AndroidManifest.xml) adb shell am start -n $launch_str } # TODO parse arguments (cd "$PROJECT_PATH" && $1)