From a7fda21c8298d8f316564280d702206147207005 Mon Sep 17 00:00:00 2001
From: Joe Malin
+ A monkeyrunner class that represents a device or emulator accessible by the workstation running
+
+ 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
+ you would use:
+
+ 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.
+
+ The key for each dictionary item should be a string. The item's value
+ can be any simple or structured data type.
+
+ 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.
+
+ Synonym for
+ 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 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.
+
+ 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
+ Sends the key event specified by
+ Reboots this device into the bootloader specified by
+ Deletes the specified package from this device, including its data and cache.
+
+ Executes an
+ Starts an Activity on this device by sending an Intent constructed from the
+ supplied arguments.
+
+ The key for each dictionary item should be a string. The item's value
+ can be any simple or structured data type.
+
+ 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.
+
+ 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
+
+ Wakes the screen of this device.
+
+ Table 1.Property variable names used with
+ getProperty() and
+ getSystemProperty().
+
+ 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.
+
+ 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
+ You do not need to create new instances of
+ 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 an
+ an integer. Use this method to economize on memory.
+
+ Creates a new
+ The image's orientation is the same as the screen orientation at the time the
+ screenshot was made.
+
+ Compares this
+ Writes the current image to the file specified by
+ A monkeyrunner class that contains static utility methods.
+
+ 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.
+
+ 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.
+
+ Displays the monkeyrunner API reference in a style similar to that of Python's
+
+ 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.
+
+ Pauses the current program for the specified number of seconds.
+
+ Tries to make a connection between the 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. monkeyrunner
.
+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()
+
+
+newdevice = MonkeyRunner.waitForConnection()
+
+Summary
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ adb shell getprop <key>. This is provided for use
+ by platform developers.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ adb
shell command and returns the result, if any.
+
+
+
+
+
+
+
+
+
+
+
+
+ MonkeyImage
+
+
+
+
+
+
+ MonkeyImage
+
+
object containing a screen capture of the current display.
+
+
+
+
+
+
+
+
+
+
+
+
+ press()
for each keycode in message
+ using the key event type DOWN_AND_UP
.
+
+
+
+
+
+
+ Constants
+
+
+
+ string
+
+ DOWN
+
+
+
+
+ string
+
+ UP
+
+
+
+
+ string
+
+ DOWN_AND_UP
+
+
+Public Methods
+
+
+
+ void
+
+ broadcastIntent
+
+ (
+ string uri,
+ string action,
+ string data,
+ string mimetype,
+ iterable categories
+ dictionary extras,
+ component component,
+ iterable flags)
+
+
+ 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).
+
+
+
+ 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()}).
+
+
+
+ void
+
+ drag
+
+ (
+ tuple start,
+ tuple end,
+ float duration,
+ integer steps)
+
+
+ Arguments
+
+
+
+
+ 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.
+
+
+ object
+
+ getProperty
+
+ (string key)
+
+
+ Arguments
+
+
+
+
+ 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.
+
+ Returns
+
+
+
+
+ object
+
+ getSystemProperty
+
+ (string key)
+
+
+ getProperty()
.
+ Arguments
+
+
+
+
+ key
+
+ The name of the system environment variable. The available variable names are listed in
+ Table 1. Property Variable Names.
+
+ Returns
+
+
+
+
+ void
+
+ installPackage
+
+ (string path)
+
+
+ Arguments
+
+
+
+
+ path
+
+ The fully-qualified path and filename of the
+ .apk
file to install.
+
+
+ dictionary
+
+ instrument
+
+ (
+ string className,
+ dictionary args)
+
+
+ Arguments
+
+
+
+
+ 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.
+
+ Returns
+
+
+ InstrumentationTestRunner
was run from the
+ command line. The format of this output is described in
+
+ Testing in Other IDEs.
+
+
+ void
+
+ press
+
+ (string name,
+ integer type)
+
+
+ type
to the key specified by
+ keycode
.
+ Arguments
+
+
+
+
+ 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
.
+
+
+ void
+
+ reboot
+
+ (string bootloadType)
+
+
+ bootloadType
.
+ Arguments
+
+
+
+
+ into
+
+ The type of bootloader to reboot into. The allowed values are
+ "bootloader", "recovery", or "None".
+
+
+
+ void
+
+ removePackage
+
+ (string package)
+
+
+ Arguments
+
+
+
+ package
+
+ The Android package name of an
+ .apk
file on this device.
+
+
+ object
+
+ shell
+
+ (string cmd)
+
+
+ adb
shell command and returns the result, if any.
+ Arguments
+
+
+
+
+ cmd
+
+ The command to execute in the
+ adb
shell. The form of these commands is
+ described in the topic Android
+ Debug Bridge.
+ Returns
+
+
+
+
+ void
+
+ startActivity
+
+ (
+ string uri,
+ string action,
+ string data,
+ string mimetype,
+ iterable categories
+ dictionary extras,
+ component component,
+ iterable flags)
+
+
+ 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).
+
+
+
+ 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
+
+ ()
+
+ Returns
+
+
+
+
+ void
+
+ touch
+
+ (
+ integer x,
+ integer y,
+ string type)
+
+
+ Arguments
+
+
+
+
+ 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
.
+
+
+ void
+
+ type
+
+ (string message)
+
+
+ press()
for each keycode in message
+ using the key event type DOWN_AND_UP
.
+ Arguments
+
+
+
+
+ message
+
+ A string containing the characters to send.
+
+
+
+ void
+
+ wake
+
+ ()
+
+
+
+Appendix
+
+
diff --git a/docs/html/guide/developing/tools/MonkeyImage.jd b/docs/html/guide/developing/tools/MonkeyImage.jd
new file mode 100644
index 0000000..ae85cb5
--- /dev/null
+++ b/docs/html/guide/developing/tools/MonkeyImage.jd
@@ -0,0 +1,435 @@
+page.title=MonkeyImage
+@jd:body
+
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+ MonkeyImage
objects.
+MonkeyImage
. Instead, use
+
+MonkeyDevice.takeSnapshot()
to create a new instance from a screenshot. For example, use:
+
+newimage = MonkeyDevice.takeSnapshot()
+
+Summary
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MonkeyImage
+
+
+
+ MonkeyImage
object from a rectangular selection of the
+ current image.
+
+
+
+
+
+
+ MonkeyImage
+ other,
+ float percent)
+ 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".
+
+
+
+
+
+
+ filename
, in the
+ format specified by format
.
+ Public Methods
+
+
+
+ string
+
+ convertToBytes
+
+ (
+ string format)
+
+
+ Arguments
+
+
+
+
+ format
+
+ The desired output format. All of the common raster output formats are supported.
+ The default value is "png" (Portable Network Graphics).
+
+
+
+ tuple
+
+ getRawPixel
+
+ (integer x,
+ integer y)
+
+
+ Arguments
+
+
+
+
+ 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
+
+
+
+
+ tuple
+
+ getRawPixelInt
+
+ (integer x,
+ integer y)
+
+
+ Arguments
+
+
+
+
+ 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
+
+
+
+
+
+
+ MonkeyImage
+
+
+ getSubImage
+
+ (tuple rect)
+
+ MonkeyImage
object from a rectangular selection of the
+ current image.
+ Arguments
+
+
+
+
+ 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.
+
+ Returns
+
+
+ MonkeyImage
object containing the selection.
+
+
+ boolean
+
+ sameAs
+
+ (
+
+
+ MonkeyImage
+
otherImage,
+ float percent
+ )
+
+ 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".
+ Arguments
+
+
+
+
+ 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.
+ Returns
+
+
+ true
if the images match, or boolean false
otherwise.
+
+
+ void
+
+ writeToFile
+
+ (string filename,
+ string format)
+
+
+ filename
, in the
+ format specified by format
.
+ Arguments
+
+
+
+
+ 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.
+
+ Summary
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pydoc
tool, using the specified format.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MonkeyDevice
+
+
+
+ monkeyrunner
backend and the
+ specified device or emulator.
+ Public Methods
+
+
+
+ string
+
+ alert
+
+ (
+ string message,
+ string title,
+ string okTitle)
+
+
+ Arguments
+
+
+
+
+ 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".
+
+
+
+ integer
+
+ choice
+
+ (string message,
+ iterable choices,
+ string title)
+
+
+ Arguments
+
+
+
+
+ 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".
+
+ Returns
+
+
+
+
+ void
+
+ help
+
+ (string format)
+
+
+ pydoc
tool, using the specified format.
+ Arguments
+
+
+
+
+ format
+
+ The markup format to use in the output. The possible values are "text" for plain text
+ or "html" for HTML.
+
+
+
+ string
+
+ input
+
+ (string message
+ string initialValue,
+ string title,
+ string okTitle,
+ string cancelTitle)
+
+
+ Arguments
+
+
+
+
+ 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".
+
+ Returns
+
+
+
+
+ void
+
+ sleep
+
+ (
+ float seconds
+ )
+
+
+ Arguments
+
+
+
+
+ seconds
+
+ The number of seconds to pause.
+
+
+
+
+
+ MonkeyDevice
+
+
+ waitForConnection
+
+ (float timeout,
+ string deviceId)
+
+ monkeyrunner
backend and the
+ specified device or emulator.
+ Arguments
+
+
+
+
+ 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.
+
+ Returns
+
+
+ MonkeyDevice
+ instance for the device or emulator. Use this object to control and communicate with the
+ device or 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; + } +} +-- cgit v1.1