diff --git a/docs/html/guide/developing/tools/MonkeyDevice.jd b/docs/html/guide/developing/tools/MonkeyDevice.jd new file mode 100644 index 0000000000000..34bbba95a8e32 --- /dev/null +++ b/docs/html/guide/developing/tools/MonkeyDevice.jd @@ -0,0 +1,1353 @@ +page.title=MonkeyDevice +@jd:body + +
+ A monkeyrunner class that represents a device or emulator accessible by the workstation running
+monkeyrunner.
+
+ This class is used to control an Android device or emulator. The methods send UI events, + retrieve information, install and remove applications, and run applications. +
+
+ You normally do not have to create an instance of MonkeyDevice. Instead, you
+ use
+
+MonkeyRunner.waitForConnection() to create a new object from a connection to a device or
+emulator. For example, instead of
+using:
+newdevice = MonkeyDevice() ++
+ you would use: +
++newdevice = MonkeyRunner.waitForConnection() ++
| Constants | +|||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| string | +DOWN | +
+ Use this with the type argument of
+ press() or touch()
+
+ to send a DOWN event.
+ |
+ |||||||||
| string | +UP | +
+ Use this with the type argument of
+ press() or touch()
+
+ to send an UP event.
+ |
+ |||||||||
| string | +DOWN_AND_UP | +
+ Use this with the type argument of
+ press() or touch()
+
+ to send a DOWN event immediately followed by an UP event.
+ |
+ |||||||||
| Methods | +|||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
+ |
+
+
+ Broadcasts an Intent to this device, as if the Intent were coming from an
+ application.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Simulates a drag gesture (touch, hold, and move) on this device's screen.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Given the name of a system environment variable, returns its value for this device.
+ The available variable names are listed in the
+ detailed description of this method.
+
+ |
+ ||||||||||
|
+ |
+
+
+. The API equivalent of
+ adb shell getprop <key>. This is provided for use
+ by platform developers.
+ |
+ ||||||||||
|
+ |
+
+
+ Installs the Android application or test package contained in packageFile onto this
+ device. If the application or test package is already installed, it is replaced.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Runs the specified component under Android instrumentation, and returns the results
+ in a dictionary whose exact format is dictated by the component being run. The
+ component must already be present on this device.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Sends the key event specified by type to the key specified by
+ keycode.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Reboots this device into the bootloader specified by bootloadType.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Deletes the specified package from this device, including its data and cache.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Executes an
+ adb shell command and returns the result, if any.
+ |
+ ||||||||||
|
+ |
+
+
+ Starts an Activity on this device by sending an Intent constructed from the
+ supplied arguments.
+
+ |
+ ||||||||||
+
+
+ MonkeyImage
+
+
+ |
+
+
+ Captures the entire screen buffer of this device, yielding a
+
+
+
+ MonkeyImage
+
+ object containing a screen capture of the current display.
+ |
+ ||||||||||
|
+ |
+
+
+ Sends a touch event specified by type to the screen location specified
+ by x and y.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Sends the characters contained in message to this device, as if they
+ had been typed on the device's keyboard. This is equivalent to calling
+
+ press() for each keycode in message
+ using the key event type DOWN_AND_UP.
+ |
+ ||||||||||
|
+ |
+
+
+ Wakes the screen of this device.
+
+ |
+ ||||||||||
+ Broadcasts an Intent to this device, as if the Intent were coming from an + application. See {@link android.content.Intent Intent} for more information about the + arguments. +
+| uri | ++ The URI for the Intent. + (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}). + | +
|---|---|
| action | ++ The action for this Intent + (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}). + | +
| data | ++ The data URI for this Intent + (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}). + | +
| mimetype | ++ The MIME type for the Intent + (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}). + | +
| categories | ++ An iterable data structure containing strings that define categories for this + Intent + (see + {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}). + | +
| extras | +
+ A dictionary of extra data for this Intent
+ (see {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
+ Intent.putExtra()}
+ for an example).
+ + The key for each dictionary item should be a string. The item's value + can be any simple or structured data type. + + |
+
| component | ++ The component for this Intent (see {@link android.content.ComponentName}). + Using this argument will direct the Intent to a specific class within a specific + Android package. + | +
| flags | ++ An iterable data structure containing flags that control how the Intent is handled + (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}). + | +
+ Simulates a drag gesture (touch, hold, and move) on this device's screen. +
+| start | ++ The starting point of the drag gesture, in the form of a tuple + (x,y) where x and y are integers. + | +
|---|---|
| end | ++ The end point of the drag gesture, in the form of a tuple (x,y) + where x and y are integers. + | +
| duration | +The duration of the drag gesture in seconds. The default is 1.0 seconds. | +
| steps | +The number of steps to take when interpolating points. The default is 10. | +
+ Given the name of a system environment variable, returns its value for this device. +
+| key | ++ The name of the system environment variable. The available variable names are listed in + Table 1. Property variable names at the end of this topic. + | +
|---|
+ Synonym for getProperty().
+
| key | ++ The name of the system environment variable. The available variable names are listed in + Table 1. Property Variable Names. + | +
|---|
+ Installs the Android application or test package contained in packageFile + onto this device. If the application or test package is already installed, it is + replaced. +
+| path | +
+ The fully-qualified path and filename of the .apk file to install.
+ |
+
|---|
+ Runs the specified component with Android instrumentation, and returns the results + in a dictionary whose exact format is dictated by the component being run. The + component must already be present on this device. +
++ Use this method to start a test case that uses one of Android's test case classes. + See Testing + Fundamentals to learn more about unit testing with the Android testing + framework. +
+| className | +
+ The name of an Android component that is already installed on this device, in the
+ standard form packagename/classname, where packagename is the
+ Android package name of a .apk file on this device, and
+ classname is the class name of an Android component (Activity,
+ ContentProvider, Service, or BroadcastReceiver) in that file. Both
+ packagename and classname must be fully qualified. See
+ {@link android.content.ComponentName} for more details.
+ |
+
|---|---|
| args | ++ A dictionary containing flags and their values. These are passed to the component as it + is started. If the flag does not take a value, set its dictionary value to an empty + string. + | +
+ A dictionary containing the component's output. The contents of the dictionary + are defined by the component itself. +
+
+ If you use {@link android.test.InstrumentationTestRunner} as the class name in
+ the componentName argument, then the result dictionary contains
+ the single key "stream". The value of "stream" is a string containing
+ the test output, as if InstrumentationTestRunner was run from the
+ command line. The format of this output is described in
+
+ Testing in Other IDEs.
+
+ Sends the key event specified by type to the key specified by
+ keycode.
+
| name | ++ The name of the keycode to send. See {@link android.view.KeyEvent} for a list of + keycode names. Use the keycode name, not its integer value. + | +
|---|---|
| type | +
+ The type of key event to send. The allowed values are
+ DOWN, UP, and
+ DOWN_AND_UP.
+ |
+
+ Reboots this device into the bootloader specified by bootloadType.
+
| into | ++ The type of bootloader to reboot into. The allowed values are + "bootloader", "recovery", or "None". + | +
|---|
+ Deletes the specified package from this device, including its data and cache. +
+| package | +
+ The Android package name of an .apk file on this device.
+ |
+
|---|
+ Executes an adb shell command and returns the result, if any.
+
| cmd | +
+ The command to execute in the adb shell. The form of these commands is
+ described in the topic Android
+ Debug Bridge.
+ |
+
|---|
+ Starts an Activity on this device by sending an Intent constructed from the + supplied arguments. +
+| uri | ++ The URI for the Intent. + (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}). + | +
|---|---|
| action | ++ The action for the Intent + (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}). + | +
| data | ++ The data URI for the Intent + (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}). + | +
| mimetype | ++ The MIME type for the Intent + (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}). + | +
| categories | ++ An iterable data structure containing strings that define categories for the + Intent + (see + {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}). + | +
| extras | +
+ A dictionary of extra data for the Intent
+ (see
+ {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
+ Intent.putExtra()}
+ for an example).
+ + The key for each dictionary item should be a string. The item's value + can be any simple or structured data type. + + |
+
| component | ++ The component for the Intent + (see {@link android.content.ComponentName}). Using this argument will direct the + Intent to a specific class within a specific Android package. + | +
| flags | ++ An iterable data structure containing flags that control how the Intent is handled + (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}). + | +
+
+ MonkeyImage
+
+
+
+ takeSnapshot
+
+ ()
+
+ + Captures the entire screen buffer of this device, yielding a + screen capture of the current display. +
++ Sends a touch event specified by type to the screen location specified + by x and y. +
+| x | ++ The horizontal position of the touch in actual device pixels, starting from the left of + the screen in its current orientation. + | +
|---|---|
| y | ++ The vertical position of the touch in actual device pixels, starting from the top of + the screen in its current orientation. + | +
| type | +
+ The type of key event to send. The allowed values are
+ DOWN, UP, and
+ DOWN_AND_UP.
+ |
+
+ Sends the characters contained in message to this device, as if they
+ had been typed on the device's keyboard. This is equivalent to calling
+ press() for each keycode in message
+ using the key event type DOWN_AND_UP.
+
| message | ++ A string containing the characters to send. + | +
|---|
+ Wakes the screen of this device. +
++ Table 1.Property variable names used with + getProperty() and + getSystemProperty(). +
+| + Property Group + | ++ Property + | ++ Description + | ++ Notes + | +
|---|---|---|---|
build |
+ board |
+ Code name for the device's system board | ++ See {@link android.os.Build} + | +
brand |
+ The carrier or provider for which the OS is customized. | +||
device |
+ The device design name. | +||
fingerprint |
+ A unique identifier for the currently-running build. | +||
host |
+ + | ||
ID |
+ A changelist number or label. | +||
model |
+ The end-user-visible name for the device. | +||
product |
+ The overall product name. | +||
tags |
+ Comma-separated tags that describe the build, such as "unsigned" and "debug". | +||
type |
+ The build type, such as "user" or "eng". | +||
user |
+ + | ||
CPU_ABI |
+ + The name of the native code instruction set, in the form CPU type plus + ABI convention. + | +||
manufacturer |
+ The product/hardware manufacturer. | +||
version.incremental |
+ + The internal code used by the source control system to represent this version + of the software. + | +||
version.release |
+ The user-visible name of this version of the software. | +||
version.sdk |
+ The user-visible SDK version associated with this version of the OS. | +||
version.codename |
+ + The current development codename, or "REL" if this version of the software has been + released. + | +||
display |
+ width |
+ The device's display width in pixels. | ++ See + {@link android.util.DisplayMetrics} for details. + | +
height |
+ The device's display height in pixels. | +||
density |
+
+ The logical density of the display. This is a factor that scales
+ DIP (Density-Independent Pixel) units to the device's resolution. DIP is adjusted so
+ that 1 DIP is equivalent to one pixel on a 160 pixel-per-inch display. For example,
+ on a 160-dpi screen, density = 1.0, while on a 120-dpi screen, density = .75.
+ + The value does not exactly follow the real screen size, but is adjusted to + conform to large changes in the display DPI. See + {@link android.util.DisplayMetrics#density} for more details. + + |
+ ||
am.current |
+ package |
+ The Android package name of the currently running package. | +
+ The am.current keys return information about the currently-running
+ Activity.
+ |
+
action |
+
+ The current activity's action. This has the same format as the name
+ attribute of the action element in a package manifest.
+ |
+ ||
comp.class |
+
+ The class name of the component that started the current Activity. See
+ comp.package for more details. |
+ ||
comp.package |
+ + The package name of the component that started the current Activity. A component + is specified by a package name and the name of class that the package contains. + | +||
data |
+ The data (if any) contained in the Intent that started the current Activity. | +||
categories |
+ The categories specified by the Intent that started the current Activity. | +||
clock |
+ realtime |
+ + The number of milliseconds since the device rebooted, including deep-sleep + time. + | ++ See {@link android.os.SystemClock} for more information. + | +
uptime |
+ + The number of milliseconds since the device rebooted, not including + deep-sleep time + | +||
millis |
+ current time since the UNIX epoch, in milliseconds. | +
+ A monkeyrunner class to hold an image of the device or emulator's screen. The image is
+ copied from the screen buffer during a screenshot. This object's methods allow you to
+ convert the image into various storage formats, write the image to a file, copy parts of
+ the image, and compare this object to other MonkeyImage objects.
+
+ You do not need to create new instances of MonkeyImage. Instead, use
+
+MonkeyDevice.takeSnapshot() to create a new instance from a screenshot. For example, use:
+
+newimage = MonkeyDevice.takeSnapshot() ++
| Methods | +|||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
+ |
+
+
+ Converts the current image to a particular format and returns it as a
+ string that you can then access as an iterable of binary bytes.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Returns the single pixel at the image location (x,y), as an
+ a tuple of integer, in the form (a,r,g,b).
+
+ |
+ ||||||||||
|
+ |
+
+
+ Returns the single pixel at the image location (x,y), as
+ a 32-bit integer.
+
+ |
+ ||||||||||
+
+ MonkeyImage
+
+ |
+
+
+ Creates a new
+ MonkeyImage object from a rectangular selection of the
+ current image.
+ |
+ ||||||||||
|
+ |
+
+ MonkeyImage
+ other,
+ float percent)
+
+ Compares this
+ MonkeyImage object to another and returns the result of
+ the comparison. The percent argument specifies the percentage
+ difference that is allowed for the two images to be "equal".
+ |
+ ||||||||||
|
+ |
+
+
+ Writes the current image to the file specified by
+ filename, in the
+ format specified by format.
+ |
+ ||||||||||
+ Converts the current image to a particular format and returns it as a string + that you can then access as an iterable of binary bytes. +
+| format | ++ The desired output format. All of the common raster output formats are supported. + The default value is "png" (Portable Network Graphics). + | +
|---|
+ Returns the single pixel at the image location (x,y), as an + a tuple of integer, in the form (a,r,g,b). +
+| x | ++ The horizontal position of the pixel, starting with 0 at the left of the screen in the + orientation it had when the screenshot was taken. + | +
|---|---|
| y | ++ The vertical position of the pixel, starting with 0 at the top of the screen in the + orientation it had when the screenshot was taken. + | +
+ Returns the single pixel at the image location (x,y), as an + an integer. Use this method to economize on memory. +
+| x | ++ The horizontal position of the pixel, starting with 0 at the left of the screen in the + orientation it had when the screenshot was taken. + | +
|---|---|
| y | ++ The vertical position of the pixel, starting with 0 at the top of the screen in the + orientation it had when the screenshot was taken. + | +
+ MonkeyImage
+
+
+ getSubImage
+
+ (tuple rect)
+
+
+ Creates a new MonkeyImage object from a rectangular selection of the
+ current image.
+
| rect | +
+ A tuple (x, y, w, h) specifying the selection. x and y specify the 0-based pixel
+ position of the upper left-hand corner of the selection. w specifies the width of the
+ region, and h specifies its height, both in units of pixels.
+ + The image's orientation is the same as the screen orientation at the time the + screenshot was made. + + |
+
|---|
MonkeyImage object containing the selection.
+
+ MonkeyImage
+ otherImage,
+ float percent
+ )
+
+
+ Compares this MonkeyImage object to another and returns the result of
+ the comparison. The percent argument specifies the percentage
+ difference that is allowed for the two images to be "equal".
+
| other | +
+ Another MonkeyImage object to compare to this one.
+ |
+
|---|---|
| + percent + | +
+ A float in the range 0.0 to 1.0, inclusive, indicating
+ the percentage of pixels that need to be the same for the method to return
+ true. The default is 1.0, indicating that all the pixels
+ must match.
+ |
+
true if the images match, or boolean false otherwise.
+
+ Writes the current image to the file specified by filename, in the
+ format specified by format.
+
| path | ++ The fully-qualified filename and extension of the output file. + | +
|---|---|
| + format + | ++ The output format to use for the file. If no format is provided, then the + method tries to guess the format from the filename's extension. If no + extension is provided and no format is specified, then the default format of + "png" (Portable Network Graphics) is used. + | +
+ A monkeyrunner class that contains static utility methods. +
+| Methods | +|||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
+ |
+
+
+ Displays an alert dialog to the process running the current
+ program.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Displays a dialog with a list of choices to the process running the current program.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Displays the monkeyrunner API reference in a style similar to that of Python's
+
+ pydoc tool, using the specified format.
+ |
+ ||||||||||
|
+ |
+
+
+ Displays a dialog that accepts input.
+
+ |
+ ||||||||||
|
+ |
+
+
+ Pauses the current program for the specified number of seconds.
+
+ |
+ ||||||||||
+
+ MonkeyDevice
+
+ |
+
+
+ Tries to make a connection between the
+ monkeyrunner backend and the
+ specified device or emulator.
+ |
+ ||||||||||
+ Displays an alert dialog to the process running the current + program. The dialog is modal, so the program pauses until the user clicks the dialog's + button. +
+| message | ++ The message to display in the dialog. + | +
|---|---|
| title | ++ The dialog's title. The default value is "Alert". + | +
| okTitle | ++ The text displayed in the dialog button. The default value is "OK". + | +
+ Displays a dialog with a list of choices to the process running the current program. The + dialog is modal, so the program pauses until the user clicks one of the dialog's + buttons. +
+| message | ++ The prompt message displayed in the dialog. + | +
|---|---|
| choices | ++ A Python iterable containing one or more objects that are displayed as strings. The + recommended form is an array of strings. + | +
| + title + | ++ The dialog's title. The default is "Input". + | +
+ Displays the monkeyrunner API reference in a style similar to that of Python's
+ pydoc tool, using the specified format.
+
| format | ++ The markup format to use in the output. The possible values are "text" for plain text + or "html" for HTML. + | +
|---|
+ Displays a dialog that accepts input and returns it to the program. The dialog is + modal, so the program pauses until the user clicks one of the dialog's buttons. +
++ The dialog contains two buttons, one of which displays the okTitle value + and the other the cancelTitle value. If the user clicks the okTitle button, + the current value of the input box is returned. If the user clicks the cancelTitle + button, an empty string is returned. +
+| message | ++ The prompt message displayed in the dialog. + | +
|---|---|
| initialValue | ++ The initial value to display in the dialog. The default is an empty string. + | +
| title | ++ The dialog's title. The default is "Input". + | +
| okTitle | ++ The text displayed in the okTitle button. The default is "OK". + | +
| cancelTitle | ++ The text displayed in the cancelTitle button. The default is "Cancel". + | +
+ Pauses the current program for the specified number of seconds. +
+| seconds | ++ The number of seconds to pause. + | +
|---|
+ MonkeyDevice
+
+
+ waitForConnection
+
+ (float timeout,
+ string deviceId)
+
+
+ Tries to make a connection between the monkeyrunner backend and the
+ specified device or emulator.
+
| timeout | ++ The number of seconds to wait for a connection. The default is to wait forever. + | +
|---|---|
| + deviceId + | ++ A regular expression that specifies the serial number of the device or emulator. See + the topic + Android Debug Bridge + for a description of device and emulator serial numbers. + | +
MonkeyDevice
+ instance for the device or emulator. Use this object to control and communicate with the
+ device or emulator.
+
-The Android SDK includes a variety of custom tools that help you develop mobile -applications on the Android platform. The most important of these are the Android -Emulator and the Android Development Tools plugin for Eclipse, but the SDK also -includes a variety of other tools for debugging, packaging, and installing your +
The Android SDK includes a variety of custom tools that help you develop mobile +applications on the Android platform. The most important of these are the Android +Emulator and the Android Development Tools plugin for Eclipse, but the SDK also +includes a variety of other tools for debugging, packaging, and installing your applications on the emulator.
- ++ The monkeyrunner tool provides an API for writing programs that control an Android device + or emulator from outside of Android code. With monkeyrunner, you can write a Python program + that installs an Android application or test package, runs it, sends keystrokes to it, + takes screenshots of its user interface, and stores screenshots on the workstation. The + monkeyrunner tool is primarily designed to test applications and devices at the + functional/framework level and for running unit test suites, but you are free to use it for + other purposes. +
+
+ The monkeyrunner tool is not related to the
+ UI/Application Exerciser Monkey,
+ also known as the monkey tool. The monkey tool runs in an
+ adb shell directly on the
+ device or emulator and generates pseudo-random streams of user and system events. In comparison,
+ the monkeyrunner tool controls devices and emulators from a workstation by sending specific
+ commands and events from an API.
+
+ The monkeyrunner tool provides these unique features for Android testing: +
+os and
+ subprocess
+ modules to call Android tools such as
+ Android Debug Bridge.
+ + You can also add your own classes to the monkeyrunner API. This is described + in more detail in the section + Extending monkeyrunner with plugins. +
++ The monkeyrunner tool uses Jython, a + implementation of Python that uses the Java programming language. Jython allows the + monkeyrunner API to interact easily with the Android framework. With Jython you can + use Python syntax to access the constants, classes, and methods of the API. +
+ +
+ Here is a simple monkeyrunner program that connects to a device, creating a
+ MonkeyDevice
+ object. Using the MonkeyDevice object, the program installs an Android application
+ package, runs one of its activities, and sends key events to the activity.
+ The program then takes a screenshot of the result, creating a
+ MonkeyImage object.
+ From this object, the program writes out a .png file containing the screenshot.
+
+# Imports the monkeyrunner modules used by this program
+from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
+
+# Connects to the current device, returning a MonkeyDevice object
+device = MonkeyRunner.waitForConnection()
+
+# Installs the Android package. Notice that this method returns a boolean, so you can test
+# to see if the installation worked.
+device.installPackage('myproject/bin/MyApplication.apk')
+
+# Runs an activity in the application
+device.startActivity(component='com.example.android.myapplication.MainActivity')
+
+# Presses the Menu button
+device.press('KEYCODE_MENU','DOWN_AND_UP')
+
+# Takes a screenshot
+result = device.takeSnapShot
+
+# Writes the screenshot to a file
+result.writeToFile('myproject/shot1.png','png')
+
+
+
+ The monkeyrunner API is contained in three modules in the package
+ com.android.monkeyrunner:
+
MonkeyRunner:
+ A class of utility methods for monkeyrunner programs. This class provides a method for
+ connecting monkeyrunner to a device or emulator. It also provides methods for
+ creating UIs for a monkeyrunner program and for displaying the built-in help.
+ MonkeyDevice:
+ Represents a device or emulator. This class provides methods for installing and
+ uninstalling packages, starting an Activity, and sending keyboard or touch events to an
+ application. You also use this class to run test packages.
+ MonkeyImage:
+ Represents a screen capture image. This class provides methods for capturing screens,
+ converting bitmap images to various formats, comparing two MonkeyImage objects, and
+ writing an image to a file.
+
+ In a Python program, you access each class as a Python module. The monkeyrunner tool
+ does not import these modules automatically. To import a module, use the
+ Python from statement:
+
+from com.android.monkeyrunner import <module> ++
+ where <module> is the class name you want to import. You can import more
+ than one module in the same from statement by separating the module names with
+ commas.
+
+ You can either run monkeyrunner programs from a file, or enter monkeyrunner statements in
+ an interactive session. You do both by invoking the monkeyrunner command
+ which is found in the tools/ subdirectory of your SDK directory.
+ If you provide a filename as an argument, the monkeyrunner command
+ runs the file's contents as a Python program; otherwise, it starts an interactive session.
+
+ The syntax of the monkeyrunner command is
+
+monkeyrunner -plugin <plugin_jar> <program_filename> <program_options> ++
+Table 1 explains the flags and arguments. +
+
+ Table 1. monkeyrunner flags and arguments.
| Argument | +Description | +
|---|---|
+ -plugin <plugin_jar>
+ |
+
+ (Optional) Specifies a .jar file containing a plugin for monkeyrunner.
+ To learn more about monkeyrunner plugins, see
+ Extending monkeyrunner with plugins. To specify more than one
+ file, include the argument multiple times.
+ |
+
+ <program_filename>
+ |
+
+ If you provide this argument, the monkeyrunner command runs the contents
+ of the file as a Python program. If the argument is not provided, the command starts an
+ interactive session.
+ |
+
+ <program_options>
+ |
+ + (Optional) Flags and arguments for the program in <program_file>. + | +
+ You can generate an API reference for monkeyrunner by running: +
++monkeyrunner <format> help.py <outfile> ++
+The arguments are: +
+<format> is either text for plain text output
+ or html for HTML output.
+ <outfile> is a path-qualified name for the output file.
+
+ You can extend the monkeyrunner API with classes you write in the Java programming language
+ and build into one or more .jar files. You can use this feature to extend the
+ monkeyrunner API with your own classes or to extend the existing classes. You can also use this
+ feature to initialize the monkeyrunner environment.
+
+ To provide a plugin to monkeyrunner, invoke the monkeyrunner command with the
+ -plugin <plugin_jar> argument described in
+ table 1.
+
+ In your plugin code, you can import and extend the the main monkeyrunner classes
+ MonkeyDevice, MonkeyImage, and MonkeyRunner in
+ com.android.monkeyrunner (see The monkeyrunner API).
+
+ Note that plugins do not give you access to the Android SDK. You can't import packages
+ such as com.android.app. This is because monkeyrunner interacts with the
+ device or emulator below the level of the framework APIs.
+
+ The .jar file for a plugin can specify a class that is instantiated before
+ script processing starts. To specify this class, add the key
+ MonkeyRunnerStartupRunner to the .jar file's
+ manifest. The value should be the name of the class to run at startup. The following
+ snippet shows how you would do this within an ant build script:
+
+<jar jarfile="myplugin" basedir="${build.dir}">
+<manifest>
+<attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
+</manifest>
+</jar>
+
+
+
+
+ To get access to monkeyrunner's runtime environment, the startup class can implement
+ com.google.common.base.Predicate<PythonInterpreter>. For example, this
+ class sets up some variables in the default namespace:
+
+package com.android.example;
+
+import com.google.common.base.Predicate;
+import org.python.util.PythonInterpreter;
+
+public class Main implements Predicate<PythonInterpreter> {
+ @Override
+ public boolean apply(PythonInterpreter anInterpreter) {
+
+ /*
+ * Examples of creating and initializing variables in the monkeyrunner environment's
+ * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
+ * and "use_emulator"
+ *
+ */
+ anInterpreter.set("newtest", "enabled");
+ anInterpreter.set("use_emulator", 1);
+
+ return true;
+ }
+}
+
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 2b803424c2649..a43e33474087f 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -254,34 +254,45 @@
@@ -540,25 +547,28 @@ page.title=Testing Fundamentals Testing in Other IDEs.
-The SDK provides two tools for functional-level application testing:
monkeyrunner command-line
+ tool.