1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#!/bin/sh 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Run the code in test.jar on the device. The jar should contain a top-level 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# class named Main to run. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Options: 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --quiet -- don't chatter 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --fast -- use the fast interpreter (the default) 938329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng# --jit -- use the jit 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --portable -- use the portable interpreter 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --debug -- wait for debugger to attach 1285fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben Cheng# --dev -- development mode (print the vm invocation cmdline) 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --no-verify -- turn off verification (on by default) 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# --no-optimize -- turn off optimization (on by default) 1509e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden# --no-precise -- turn off precise GC (on by default) 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectmsg() { 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "$QUIET" = "n" ]; then 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "$@" 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectINTERP="" 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectDEBUG="n" 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectVERIFY="y" 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOPTIMIZE="y" 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectQUIET="n" 2849a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenPRECISE="y" 2985fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben ChengDEV_MODE="n" 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwhile true; do 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "x$1" = "x--quiet" ]; then 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project QUIET="y" 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--fast" ]; then 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project INTERP="fast" 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project msg "Using fast interpreter" 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 3938329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng elif [ "x$1" = "x--jit" ]; then 4038329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng INTERP="jit" 4138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng msg "Using jit" 4238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng shift 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--portable" ]; then 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project INTERP="portable" 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project msg "Using portable interpreter" 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--debug" ]; then 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DEBUG="y" 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 5009e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden elif [ "x$1" = "x--dev" ]; then 5185fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben Cheng DEV_MODE="y" 5209e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden shift 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--no-verify" ]; then 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project VERIFY="n" 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--no-optimize" ]; then 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project OPTIMIZE="n" 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 5949a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden elif [ "x$1" = "x--no-precise" ]; then 6049a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden PRECISE="n" 6149a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden shift 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif [ "x$1" = "x--" ]; then 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elif expr "x$1" : "x--" >/dev/null 2>&1; then 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "unknown option: $1" 1>&2 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 1 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdone 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "x$INTERP" = "x" ]; then 74eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich INTERP="jit" 75eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich msg "Using jit by default" 76eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichfi 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$OPTIMIZE" = "y" ]; then 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "$VERIFY" = "y" ]; then 80eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich DEX_OPTIMIZE="-Xdexopt:verified" 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 82eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich DEX_OPTIMIZE="-Xdexopt:all" 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 84eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich msg "Performing optimizations" 85eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichelse 86eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich DEX_OPTIMIZE="-Xdexopt:none" 87eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich msg "Skipping optimizations" 88eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichfi 89eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich 90eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$VERIFY" = "y" ]; then 91eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich DEX_VERIFY="" 92eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich msg "Performing verification" 93eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichelse 94eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich DEX_VERIFY="-Xverify:none" 95eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich msg "Skipping verification" 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectmsg "------------------------------" 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$QUIET" = "n" ]; then 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adb push test.jar /data 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adb push test-ex.jar /data 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adb push test.jar /data >/dev/null 2>&1 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adb push test-ex.jar /data >/dev/null 2>&1 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$DEBUG" = "y" ]; then 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DEX_DEBUG="-agentlib:jdwp=transport=dt_android_adb,server=y,suspend=y" 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11249a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenif [ "$PRECISE" = "y" ]; then 11349a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden GC_OPTS="-Xgc:precise -Xgenregmap" 11449a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenelse 11549a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden GC_OPTS="-Xgc:noprecise" 11649a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenfi 11749a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden 118eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichcmdline="cd /data; dalvikvm $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG \ 119eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich $GC_OPTS -cp test.jar -Xint:${INTERP} -ea Main" 120eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$DEV_MODE" = "y" ]; then 121eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich echo $cmdline "$@" 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 123eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichadb shell $cmdline "$@" 124