| 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. |