| # |
| # Copyright (C) 2012 The Android Open Source Project |
| # |
| # Licensed 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. |
| # |
| # Script to start "uiautomator" on the device |
| # |
| # The script does a couple of things: |
| # * Use an alternative dalvik cache when running as non-root. Jar file needs |
| # to be dexopt'd to run in Dalvik. For plain jar files, this is done at first |
| # use. shell user does not have write permission to default system Dalvik |
| # cache so we redirect to an alternative cache |
| # * special processing for subcommand 'runtest': |
| # * '--nohup' allows process continue to run even if parent process that |
| # started it has already terminated. We parse for this parameter and set |
| # signal trap. This is useful for testing with USB disconnected |
| # * all jar files that the test classes resides in, or dependent on are |
| # provided on command line and exported to CLASSPATH environment variable |
| # before starting the Java code. This offloads the task of class loading |
| # and resolving of cross jar class dependency to Dalvik |
| # * all other subcommand or options are directly passed into Java code for |
| # further parsing |
| |
| export run_base=/data/local/tmp |
| export base=/system |
| |
| # if not running as root, trick dalvik into using an alternative dex cache |
| if [ ${USER_ID} -ne 0 ]; then |
| tmp_cache=${run_base}/dalvik-cache |
| |
| if [ ! -d ${tmp_cache} ]; then |
| mkdir -p ${tmp_cache} |
| fi |
| |
| export ANDROID_DATA=${run_base} |
| fi |
| |
| # take first parameter as the command |
| cmd=${1} |
| |
| if [ -z "${1}" ]; then |
| cmd="help" |
| fi |
| |
| # strip the command parameter |
| if [ -n "${1}" ]; then |
| shift |
| fi |
| |
| CLASSPATH=/system/framework/android.test.runner.jar:${base}/framework/uiautomator.jar |
| |
| # eventually args will be what get passed down to Java code |
| args= |
| # we also pass the list of jar files, so we can extract class names for tests |
| # if they are not explicitly specified |
| jars= |
| |
| # special case pre-processing for 'runtest' command |
| if [ "${cmd}" == "runtest" ]; then |
| # Print deprecation warning |
| echo "Warning: This version of UI Automator is deprecated. New tests should be written using" |
| echo "UI Automator 2.0 which is available as part of the Android Testing Support Library." |
| echo "See https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html" |
| echo "for more details." |
| # first parse the jar paths |
| while [ true ]; do |
| if [ -z "${1}" ] && [ -z "${jars}" ]; then |
| echo "Error: more parameters expected for runtest; please see usage for details" |
| cmd="help" |
| break |
| fi |
| if [ -z "${1}" ]; then |
| break |
| fi |
| jar=${1} |
| if [ "${1:0:1}" = "-" ]; then |
| # we are done with jars, starting with parameters now |
| break |
| fi |
| # if relative path, append the default path prefix |
| if [ "${1:0:1}" != "/" ]; then |
| jar=${run_base}/${1} |
| fi |
| # about to add the file to class path, check if it's valid |
| if [ ! -f ${jar} ]; then |
| echo "Error: ${jar} does not exist" |
| # force to print help message |
| cmd="help" |
| break |
| fi |
| jars=${jars}:${jar} |
| # done processing current arg, moving on |
| shift |
| done |
| # look for --nohup: if found, consume it and trap SIG_HUP, otherwise just |
| # append the arg to args |
| while [ -n "${1}" ]; do |
| if [ "${1}" = "--nohup" ]; then |
| trap "" HUP |
| shift |
| else |
| args="${args} ${1}" |
| shift |
| fi |
| done |
| else |
| # if cmd is not 'runtest', just take the rest of the args |
| args=${@} |
| fi |
| |
| args="${cmd} ${args}" |
| if [ -n "${jars}" ]; then |
| args="${args} -e jars ${jars}" |
| fi |
| |
| CLASSPATH=${CLASSPATH}:${jars} |
| export CLASSPATH |
| exec app_process ${base}/bin com.android.commands.uiautomator.Launcher ${args} |