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