![](https://developer.android.com/static/images/training/testing/robo.png)

Use the App Crawler tool, part of [Jetpack](https://developer.android.com/jetpack), to automatically test
your app without the need to write or maintain any code.

The crawler runs alongside your app, automatically issuing actions
(tap, swipe, etc.) to explore the state-space of your app.
The crawl terminates automatically when there are no more unique actions to
perform, the app crashes, or a timeout you designate is reached.

Testing with the crawler is easy because there's no code to write or maintain.
Moreover, you can run it on a variety of devices to look for crashes, visual
issues, or performance problems. Typically, it's a good idea to use a
cloud-based service like [Firebase Test
Lab](https://firebase.google.com/docs/test-lab/) to test multiple combinations
of screen sizes and hardware configurations more easily and quickly.

## Target audience

App Crawler is targeted at developers who want to ensure their app's basic
functionality with minimal configuration. In addition to purely opaque-box
testing, the crawler can also be configured to provide specific inputs,
such as login credentials or deep links.

## Getting started

Before starting, make sure you have a recent version of the Android SDK.
This comes with [Android Studio](https://developer.android.com/studio).
If you install a standalone Android SDK, make sure it includes the latest
latest build tools and platform tools.

Then, [download the crawler binary
archive](https://dl.google.com/appcrawler/beta1/app-crawler.zip).

Next, either start an emulator or connect a physical device using a USB cable.
Confirm the device is connected by running the following command:  

```
adb devices
```

To invoke the crawler, first extract the archive to the directory of your
choice. From that directory, invoke the crawler using the following command:  

```
java -jar crawl_launcher.jar --apk-file path/to/my/app.apk --android-sdk path/to/my/android/sdk
```

## Crawler options

You can use the following options to invoke the crawler:

|                          Option                           |                                                                                                Description                                                                                                |
|-----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--android-sdk `<var translate="no">path</var>            | Specifies the path to your Android SDK. This is a **required** flag.                                                                                                                                      |
| `--apk-file `<var translate="no">file</var>               | Specifies the path to your app APK, which App Crawler then installs and crawls. This is a **required** flag if `--app-package-name` isn't specified.                                                      |
| `--app-package-name `<var translate="no">name</var>       | Specifies the package name of your app. Use this option when your app is already installed on the device and no re-installation is required. This is a **required** flag if `--apk-file` isn't specified. |
| `--key-store `<var translate="no">path</var>              | Specifies the path to the keystore that signs your app and crawler APKs. Use this option when your app requires a specific signature to function properly.                                                |
| `--key-store-password `<var translate="no">password</var> | Specifies the password for the keystore you provided for `--key-store` option. This is a **required** flag if `--key-store` is specified.                                                                 |
| `--timeout-sec `<var translate="no">timeout</var>         | Specifies the timeout for your crawl in seconds. If not specified, the crawl stops after 60 seconds.                                                                                                      |

## Known issues

**Failed to delete original signature files**

Prior to the start of the crawl, JDK 9 users may see this error message:  

```
androidx.test.tools.crawler.launcher.exceptions.ApkSigningException: Failed to delete original signature files
```

If you experience this behavior, we recommend using JDK 8 or 10+. For more
information on this issue, see this
[JDK 9 bug](https://bugs.openjdk.java.net/browse/JDK-8184940).
Some users have fixed the issue by rebuilding their APK using an updated version
of Android Studio.

## Additional resources

For more information about using App Crawler, consult the
following resources.

- [Firebase Test Lab Robo Test](https://firebase.google.com/docs/test-lab/android/robo-ux-test) contains detailed documentation as well as instructions for how to run crawler tests in the cloud.