Home | History | Annotate | Download | only in etc
      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 
      6 msg() {
      7     if [ "$QUIET" = "n" ]; then
      8         echo "$@"
      9     fi
     10 }
     11 
     12 LIB="libartd.so"
     13 GDB="n"
     14 DEBUGGER="n"
     15 INTERPRETER="n"
     16 VERIFY="y"
     17 OPTIMIZE="y"
     18 ZYGOTE=""
     19 QUIET="n"
     20 DEV_MODE="n"
     21 INVOKE_WITH=""
     22 
     23 while true; do
     24     if [ "x$1" = "x--quiet" ]; then
     25         QUIET="y"
     26         shift
     27     elif [ "x$1" = "x-lib" ]; then
     28         shift
     29         LIB="$1"
     30     elif [ "x$1" = "x-O" ]; then
     31         LIB="libart.so"
     32         shift
     33     elif [ "x$1" = "x--debug" ]; then
     34         DEBUGGER="y"
     35         shift
     36     elif [ "x$1" = "x--gdb" ]; then
     37         GDB="y"
     38         DEV_MODE="y"
     39         shift
     40     elif [ "x$1" = "x--zygote" ]; then
     41         ZYGOTE="--zygote"
     42         msg "Spawning from zygote"
     43         shift
     44     elif [ "x$1" = "x--dev" ]; then
     45         DEV_MODE="y"
     46         shift
     47     elif [ "x$1" = "x--interpreter" ]; then
     48         INTERPRETER="y"
     49         shift
     50     elif [ "x$1" = "x--invoke-with" ]; then
     51         shift
     52         if [ "x$INVOKE_WITH" = "x" ]; then
     53             INVOKE_WITH="$1"
     54         else
     55             INVOKE_WITH="$INVOKE_WITH $1"
     56         fi
     57         shift
     58     elif [ "x$1" = "x--no-verify" ]; then
     59         VERIFY="n"
     60         shift
     61     elif [ "x$1" = "x--no-optimize" ]; then
     62         OPTIMIZE="n"
     63         shift
     64     elif [ "x$1" = "x--" ]; then
     65         shift
     66         break
     67     elif expr "x$1" : "x--" >/dev/null 2>&1; then
     68         echo "unknown $0 option: $1" 1>&2
     69         exit 1
     70     else
     71         break
     72     fi
     73 done
     74 
     75 if [ "$ZYGOTE" = "" ]; then
     76     if [ "$OPTIMIZE" = "y" ]; then
     77         if [ "$VERIFY" = "y" ]; then
     78             DEX_OPTIMIZE="-Xdexopt:verified"
     79         else
     80             DEX_OPTIMIZE="-Xdexopt:all"
     81         fi
     82         msg "Performing optimizations"
     83     else
     84         DEX_OPTIMIZE="-Xdexopt:none"
     85         msg "Skipping optimizations"
     86     fi
     87 
     88     if [ "$VERIFY" = "y" ]; then
     89         DEX_VERIFY=""
     90         msg "Performing verification"
     91     else
     92         DEX_VERIFY="-Xverify:none"
     93         msg "Skipping verification"
     94     fi
     95 fi
     96 
     97 msg "------------------------------"
     98 
     99 if [ "$QUIET" = "n" ]; then
    100   adb shell rm -r $DEX_LOCATION
    101   adb shell mkdir -p $DEX_LOCATION
    102   adb push $TEST_NAME.jar $DEX_LOCATION
    103   adb push $TEST_NAME-ex.jar $DEX_LOCATION
    104 else
    105   adb shell rm -r $DEX_LOCATION >/dev/null 2>&1
    106   adb shell mkdir -p $DEX_LOCATION >/dev/null 2>&1
    107   adb push $TEST_NAME.jar $DEX_LOCATION >/dev/null 2>&1
    108   adb push $TEST_NAME-ex.jar $DEX_LOCATION >/dev/null 2>&1
    109 fi
    110 
    111 if [ "$DEBUGGER" = "y" ]; then
    112   # Use this instead for ddms and connect by running 'ddms':
    113   # DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_android_adb,server=y,suspend=y"
    114   # TODO: add a separate --ddms option?
    115 
    116   PORT=12345
    117   msg "Waiting for jdb to connect:"
    118   msg "    adb forward tcp:$PORT tcp:$PORT"
    119   msg "    jdb -attach localhost:$PORT"
    120   DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=$PORT,server=y,suspend=y"
    121 fi
    122 
    123 if [ "$GDB" = "y" ]; then
    124     gdb="gdbserver :5039"
    125     gdbargs="--args $exe"
    126 fi
    127 
    128 if [ "$INTERPRETER" = "y" ]; then
    129     INT_OPTS="-Xint"
    130 fi
    131 
    132 JNI_OPTS="-Xjnigreflimit:512 -Xcheck:jni"
    133 
    134 cmdline="cd $DEX_LOCATION && mkdir dalvik-cache && export ANDROID_DATA=$DEX_LOCATION && export DEX_LOCATION=$DEX_LOCATION && \
    135     $INVOKE_WITH $gdb dalvikvm $gdbargs -XXlib:$LIB $ZYGOTE $JNI_OPTS $INT_OPTS $DEBUGGER_OPTS -Ximage:/data/art-test/core.art -cp $DEX_LOCATION/$TEST_NAME.jar Main"
    136 if [ "$DEV_MODE" = "y" ]; then
    137   echo $cmdline "$@"
    138 fi
    139 
    140 adb shell $cmdline "$@"
    141