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