SIMPLE PROTOCOL FOR AUTOMATED NETWORK CONTROL
The Simple Protocol for Automated Network Control was designed to be a low-level way to programmability inject KeyEvents and MotionEvents into the input system. The idea is that a process will run on a host computer that will support higher-level operations (like conditionals, etc.) and will talk (via TCP over ADB) to the device in Simple Protocol for Automated Network Control. For security reasons, the Monkey only binds to localhost, so you will need to use adb to setup port forwarding to actually talk to the device.
INITIAL SETUP
Setup port forwarding from a local port on your machine to a port on the device:
$ adb forward tcp:1080 tcp:1080
Start the monkey server
$ adb shell monkey --port 1080
Now you're ready to run commands
COMMAND LIST
Individual commands are separated by newlines. The Monkey will respond to every command with a line starting with OK for commands that executed without a problem, or a line starting with ERROR for commands that had problems being run. For commands that return a value, that value is returned on the same line as the OK or ERROR response. The value is everything after (but not include) the colon on that line. For ERROR values, this could be a message indicating what happened. A possible example:
key down menu OK touch monkey ERROR: monkey not a number getvar sdk OK: donut getvar foo ERROR: no such var
The complete list of commands follows:
key [down|up] keycode
This command injects KeyEvent's into the input system. The keycode parameter refers to the KEYCODE list in the KeyEvent class (http://developer.android.com/reference/android/view/KeyEvent.html). The format of that parameter is quite flexible. Using the menu key as an example, it can be 82 (the integer value of the keycode), KEYCODE_MENU (the name of the keycode), or just menu (and the Monkey will add the KEYCODE part). Do note that this last part doesn't work for things like KEYCODE_1 for obvious reasons.
Note that sending a full button press requires sending both the down and the up event for that key
touch [down|up|move] x y
This command injects a MotionEvent into the input system that simulates a user touching the touchscreen (or a pointer event). x and y specify coordinates on the display (0 0 being the upper left) for the touch event to happen. Just like key events, touch events at a single location require both a down and an up. To simulate dragging, send a "touch down", then a series of "touch move" events (to simulate the drag), followed by a "touch up" at the final location.
trackball dx dy
This command injects a MotionEvent into the input system that simulates a user using the trackball. dx and dy indicates the amount of change in the trackball location (as opposed to exact coordinates that the touch events use)
flip [open|close]
This simulates the opening or closing the keyboard (like on dream).
wake
This command will wake the device up from sleep and allow user input.
tap x y The tap command is a shortcut for the touch command. It will automatically send both the up and the down event.
press keycode
The press command is a shortcut for the key command. The keycode paramter works just like the key command and will automatically send both the up and the down event.
type string
This command will simulate a user typing the given string on the keyboard by generating the proper KeyEvents.
listvar
This command lists all the vars that the monkey knows about. They are returned as a whitespace separated list.
getvar varname
This command returns the value of the given var. listvar can be used to find out what vars are supported.
quit
Fully quit the monkey and accept no new sessions.
done
Close the current session and allow a new session to connect
OTHER NOTES
There are some convenience features added to allow running without needing a host process.
Lines starting with a # character are considered comments. The Monkey eats them and returns no indication that it did anything (no ERROR and no OK).
You can put the Monkey to sleep by using the "sleep" command with a single argument, how many ms to sleep.