• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#
3# Run the code in test.jar on the device. The jar should contain a top-level
4# class named Main to run.
5
6msg() {
7    if [ "$QUIET" = "n" ]; then
8        echo "$@"
9    fi
10}
11
12RELOCATE="y"
13GDB="n"
14DEBUGGER="n"
15INTERPRETER="n"
16VERIFY="y"
17OPTIMIZE="y"
18ZYGOTE=""
19QUIET="n"
20DEV_MODE="n"
21INVOKE_WITH=""
22FLAGS=""
23TARGET_SUFFIX="32"
24GDB_TARGET_SUFFIX=""
25
26while true; do
27    if [ "x$1" = "x--quiet" ]; then
28        QUIET="y"
29        shift
30    elif [ "x$1" = "x--lib" ]; then
31        shift
32        if [ "x$1" = "x" ]; then
33            echo "$0 missing argument to --lib" 1>&2
34            exit 1
35        fi
36        LIB="$1"
37        shift
38    elif [ "x$1" = "x-Xcompiler-option" ]; then
39        shift
40        option="$1"
41        FLAGS="${FLAGS} -Xcompiler-option $option"
42        shift
43    elif [ "x$1" = "x--runtime-option" ]; then
44        shift
45        option="$1"
46        FLAGS="${FLAGS} $option"
47        shift
48    elif [ "x$1" = "x--boot" ]; then
49        shift
50        BOOT_OPT="$1"
51        shift
52    elif [ "x$1" = "x--debug" ]; then
53        DEBUGGER="y"
54        shift
55    elif [ "x$1" = "x--gdb" ]; then
56        GDB="y"
57        DEV_MODE="y"
58        shift
59    elif [ "x$1" = "x--zygote" ]; then
60        ZYGOTE="--zygote"
61        msg "Spawning from zygote"
62        shift
63    elif [ "x$1" = "x--dev" ]; then
64        DEV_MODE="y"
65        shift
66    elif [ "x$1" = "x--relocate" ]; then
67        RELOCATE="y"
68        shift
69    elif [ "x$1" = "x--no-relocate" ]; then
70        RELOCATE="n"
71        shift
72    elif [ "x$1" = "x--interpreter" ]; then
73        INTERPRETER="y"
74        shift
75    elif [ "x$1" = "x--invoke-with" ]; then
76        shift
77        if [ "x$1" = "x" ]; then
78            echo "$0 missing argument to --invoke-with" 1>&2
79            exit 1
80        fi
81        if [ "x$INVOKE_WITH" = "x" ]; then
82            INVOKE_WITH="$1"
83        else
84            INVOKE_WITH="$INVOKE_WITH $1"
85        fi
86        shift
87    elif [ "x$1" = "x--no-verify" ]; then
88        VERIFY="n"
89        shift
90    elif [ "x$1" = "x--no-optimize" ]; then
91        OPTIMIZE="n"
92        shift
93    elif [ "x$1" = "x--" ]; then
94        shift
95        break
96    elif [ "x$1" = "x--64" ]; then
97        TARGET_SUFFIX="64"
98        GDB_TARGET_SUFFIX="64"
99        shift
100    elif expr "x$1" : "x--" >/dev/null 2>&1; then
101        echo "unknown $0 option: $1" 1>&2
102        exit 1
103    else
104        break
105    fi
106done
107
108if [ "$ZYGOTE" = "" ]; then
109    if [ "$OPTIMIZE" = "y" ]; then
110        if [ "$VERIFY" = "y" ]; then
111            DEX_OPTIMIZE="-Xdexopt:verified"
112        else
113            DEX_OPTIMIZE="-Xdexopt:all"
114        fi
115        msg "Performing optimizations"
116    else
117        DEX_OPTIMIZE="-Xdexopt:none"
118        msg "Skipping optimizations"
119    fi
120
121    if [ "$VERIFY" = "y" ]; then
122        DEX_VERIFY=""
123        msg "Performing verification"
124    else
125        DEX_VERIFY="-Xverify:none"
126        msg "Skipping verification"
127    fi
128fi
129
130msg "------------------------------"
131
132if [ "$QUIET" = "n" ]; then
133  adb shell rm -r $DEX_LOCATION
134  adb shell mkdir -p $DEX_LOCATION
135  adb push $TEST_NAME.jar $DEX_LOCATION
136  adb push $TEST_NAME-ex.jar $DEX_LOCATION
137else
138  adb shell rm -r $DEX_LOCATION >/dev/null 2>&1
139  adb shell mkdir -p $DEX_LOCATION >/dev/null 2>&1
140  adb push $TEST_NAME.jar $DEX_LOCATION >/dev/null 2>&1
141  adb push $TEST_NAME-ex.jar $DEX_LOCATION >/dev/null 2>&1
142fi
143
144if [ "$DEBUGGER" = "y" ]; then
145  # Use this instead for ddms and connect by running 'ddms':
146  # DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_android_adb,server=y,suspend=y"
147  # TODO: add a separate --ddms option?
148
149  PORT=12345
150  msg "Waiting for jdb to connect:"
151  msg "    adb forward tcp:$PORT tcp:$PORT"
152  msg "    jdb -attach localhost:$PORT"
153  DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=$PORT,server=y,suspend=y"
154fi
155
156if [ "$GDB" = "y" ]; then
157    gdb="gdbserver$GDB_TARGET_SUFFIX :5039"
158    gdbargs="$exe"
159fi
160
161if [ "$INTERPRETER" = "y" ]; then
162    INT_OPTS="-Xint"
163fi
164
165JNI_OPTS="-Xjnigreflimit:512 -Xcheck:jni"
166
167if [ "$RELOCATE" = "y" ]; then
168  RELOCATE_OPT="-Xrelocate"
169  FLAGS="${FLAGS} -Xcompiler-option --include-patch-information"
170else
171  RELOCATE_OPT="-Xnorelocate"
172fi
173
174cmdline="cd $DEX_LOCATION && export ANDROID_DATA=$DEX_LOCATION && export DEX_LOCATION=$DEX_LOCATION && \
175    $INVOKE_WITH $gdb /system/bin/dalvikvm$TARGET_SUFFIX $FLAGS $gdbargs -XXlib:$LIB $ZYGOTE $JNI_OPTS $RELOCATE_OPT $INT_OPTS $DEBUGGER_OPTS $BOOT_OPT -cp $DEX_LOCATION/$TEST_NAME.jar Main"
176if [ "$DEV_MODE" = "y" ]; then
177  echo $cmdline "$@"
178fi
179
180adb shell $cmdline "$@"
181