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