# BackupRestoreController

Artifact: [androidx.test.backup:backup-host](https://developer.android.com/jetpack/androidx/releases/test-backup) [View Source](https://cs.android.com/search?q=file:androidx/test/backup/host/BackupRestoreController.kt+class:androidx.test.backup.host.BackupRestoreController) Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

*** ** * ** ***


```
public interface BackupRestoreController extends AutoCloseable
```

<br />

*** ** * ** ***

Controls backup, restore, and verification workflows for a test device.

Provides operations to seed test data with `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDevice(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)`, run backups with `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)`, wipe app data with `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#clearAppData()`, and restore data with `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestore(java.nio.file.Path,java.time.Duration)`.

## Summary

| ### Public fields |
|---|---|
| `default static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#ACTION_ASSERT_STORAGE()` Class name of the prebuilt action that verifies restored data in app storage. |
| `default static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#ACTION_POPULATE_STORAGE()` Class name of the prebuilt action that seeds test data into app storage. |
| `default static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#DEFAULT_INSTALL_OPTIONS()` Default package installation flags: reinstall, allow test, grant all runtime permissions. |

| ### Public methods |
|---|---|
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#clearAppData()()` Clears application sandbox data on the device via `pm clear`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#clearAppDataAsync()()` Clears application sandbox data asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#clearDeviceLogs()()` Clears the device logcat buffer via `logcat -c`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#clearDeviceLogsAsync()()` Clears the device logcat buffer asynchronously. |
| `abstract void` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#close()()` Releases the resources held by this controller. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#fetchDeviceLogs(java.nio.file.Path,java.time.Duration)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html duration)` Saves recent device logcat entries to a local file. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#fetchDeviceLogsAsync(java.nio.file.Path)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath)` Saves recent device logcat entries asynchronously to a local file. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#fetchDeviceLogsAsync(java.nio.file.Path,java.time.Duration)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html duration )` Saves recent device logcat entries asynchronously to a local file. |
| `abstract int` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#getApiLevel()()` SDK API level of this device or emulator. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#getApplicationId()()` Application ID of the target package under test. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#getSerialNumber()()` Serial number of this device or emulator. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#installApk(java.nio.file.Path,kotlin.collections.List)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> options)` Installs an APK from the host onto the device via `pm install`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#installApkAsync(java.nio.file.Path)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile)` Installs an APK asynchronously from the host onto the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#installApkAsync(java.nio.file.Path,kotlin.collections.List)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> options )` Installs an APK asynchronously from the host onto the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchApp(kotlin.String,kotlin.collections.Map,kotlin.String)( https://developer.android.com/reference/java/lang/String.html activityClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras, https://developer.android.com/reference/java/lang/String.html action )` Starts the target application on the device via `am start`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchAppAsync()()` Starts the target application asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchAppAsync(kotlin.String)(https://developer.android.com/reference/java/lang/String.html activityClass)` Starts the target application asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchAppAsync(kotlin.String,kotlin.collections.Map)( https://developer.android.com/reference/java/lang/String.html activityClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras )` Starts the target application asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchAppAsync(kotlin.String,kotlin.collections.Map,kotlin.String)( https://developer.android.com/reference/java/lang/String.html activityClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras, https://developer.android.com/reference/java/lang/String.html action )` Starts the target application asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout )` Captures an application backup archive using the specified transport mode. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackupAsync(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir )` Captures an application backup archive asynchronously using the specified transport mode. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackupAsync(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout )` Captures an application backup archive asynchronously using the specified transport mode. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestore(java.nio.file.Path,java.time.Duration)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout)` Restores application data from a backup archive. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestoreAsync(java.nio.file.Path)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile)` Restores application data asynchronously from a backup archive. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestoreAsync(java.nio.file.Path,java.time.Duration)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout)` Restores application data asynchronously from a backup archive. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#pullFile(kotlin.String,java.nio.file.Path)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html devicePath, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html hostDestination)` Copies a file from the device to the host machine via `adb pull`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#pullFileAsync(kotlin.String,java.nio.file.Path)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html devicePath, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html hostDestination)` Copies a file asynchronously from the device to the host machine. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn )` Runs a full backup and restore flow for a single storage domain. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn )` Runs a full backup and restore flow for multiple storage domains. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode )` Runs a full backup and restore flow asynchronously for a single storage domain. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode )` Runs a full backup and restore flow asynchronously for multiple storage domains. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn )` Runs a full backup and restore flow asynchronously for a single storage domain, restoring and verifying on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn )` Runs a full backup and restore flow asynchronously for multiple storage domains, restoring and verifying on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDevice(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout, boolean waitForDebugger )` Runs an on-device action inside the target application process. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDeviceAsync(kotlin.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName)` Runs an on-device action asynchronously inside the target application process. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDeviceAsync(kotlin.String,kotlin.collections.Map)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args )` Runs an on-device action asynchronously inside the target application process. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDeviceAsync(kotlin.String,kotlin.collections.Map,java.time.Duration)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout )` Runs an on-device action asynchronously inside the target application process. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDeviceAsync(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout, boolean waitForDebugger )` Runs an on-device action asynchronously inside the target application process. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#stopApp()()` Force-stops the target application on the device via `am force-stop`. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#stopAppAsync()()` Force-stops the target application asynchronously on the device. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#uninstallApp()()` Uninstalls the target application from the device via `pm uninstall`, if it is installed. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#uninstallAppAsync()()` Uninstalls the target application asynchronously from the device, if it is installed. |

## Public fields

### ACTION_ASSERT_STORAGE

```
default static final @NonNull String ACTION_ASSERT_STORAGE
```

Class name of the prebuilt action that verifies restored data in app storage.

### ACTION_POPULATE_STORAGE

```
default static final @NonNull String ACTION_POPULATE_STORAGE
```

Class name of the prebuilt action that seeds test data into app storage.

### DEFAULT_INSTALL_OPTIONS

```
default static final @NonNull List<@NonNull String> DEFAULT_INSTALL_OPTIONS
```

Default package installation flags: reinstall, allow test, grant all runtime permissions.

## Public methods

### clearAppData

```
abstract @NonNull BackupRestoreController clearAppData()
```

Clears application sandbox data on the device via `pm clear`.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if clearing application data fails |

### clearAppDataAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> clearAppDataAsync()
```

Clears application sandbox data asynchronously on the device.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### clearDeviceLogs

```
abstract @NonNull BackupRestoreController clearDeviceLogs()
```

Clears the device logcat buffer via `logcat -c`.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if clearing the logcat buffer fails |

### clearDeviceLogsAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> clearDeviceLogsAsync()
```

Clears the device logcat buffer asynchronously.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### close

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract void close()
```

Releases the resources held by this controller.

The ADB session that the controller runs on stays open, since other controllers can share it. The session is closed by whoever created it.

### fetchDeviceLogs

```
abstract @NonNull BackupRestoreController fetchDeviceLogs(@NonNull Path destinationPath, @NonNull Duration duration)
```

Saves recent device logcat entries to a local file.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath` | local file path where logs will be written |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html duration` | time window of historical logs to capture |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if capturing logs fails |

### fetchDeviceLogsAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> fetchDeviceLogsAsync(@NonNull Path destinationPath)
```

Saves recent device logcat entries asynchronously to a local file.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath` | local file path where logs will be written |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### fetchDeviceLogsAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> fetchDeviceLogsAsync(
    @NonNull Path destinationPath,
    @NonNull Duration duration
)
```

Saves recent device logcat entries asynchronously to a local file.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html destinationPath` | local file path where logs will be written |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html duration` | time window of historical logs to capture |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### getApiLevel

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract int getApiLevel()
```

SDK API level of this device or emulator.

### getApplicationId

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull String getApplicationId()
```

Application ID of the target package under test.

### getSerialNumber

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull String getSerialNumber()
```

Serial number of this device or emulator.

### installApk

```
abstract @NonNull BackupRestoreController installApk(@NonNull Path apkFile, @NonNull List<@NonNull String> options)
```

Installs an APK from the host onto the device via `pm install`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile` | path to the APK on the host |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> options` | installation flags to pass to package manager |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if package installation fails |

### installApkAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> installApkAsync(@NonNull Path apkFile)
```

Installs an APK asynchronously from the host onto the device.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile` | path to the APK on the host |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### installApkAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> installApkAsync(
    @NonNull Path apkFile,
    @NonNull List<@NonNull String> options
)
```

Installs an APK asynchronously from the host onto the device.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html apkFile` | path to the APK on the host |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> options` | installation flags to pass to package manager |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### launchApp

```
abstract @NonNull BackupRestoreController launchApp(
    String activityClass,
    @NonNull Map<@NonNull String, @NonNull String> intentExtras,
    String action
)
```

Starts the target application on the device via `am start`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html activityClass` | activity class to launch, or null for default launcher activity |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras` | key-value pairs to pass as intent extras |
| `https://developer.android.com/reference/java/lang/String.html action` | intent action string to launch with, or null for MAIN |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if starting the application fails |

### launchAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> launchAppAsync()
```

Starts the target application asynchronously on the device.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### launchAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> launchAppAsync(String activityClass)
```

Starts the target application asynchronously on the device.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html activityClass` | activity class to launch, or null for default launcher activity |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### launchAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> launchAppAsync(
    String activityClass,
    @NonNull Map<@NonNull String, @NonNull String> intentExtras
)
```

Starts the target application asynchronously on the device.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html activityClass` | activity class to launch, or null for default launcher activity |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras` | key-value pairs to pass as intent extras |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### launchAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> launchAppAsync(
    String activityClass,
    @NonNull Map<@NonNull String, @NonNull String> intentExtras,
    String action
)
```

Starts the target application asynchronously on the device.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html activityClass` | activity class to launch, or null for default launcher activity |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> intentExtras` | key-value pairs to pass as intent extras |
| `https://developer.android.com/reference/java/lang/String.html action` | intent action string to launch with |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### performBackup

```
abstract @NonNull Path performBackup(
    @NonNull BackupTransportMode mode,
    @NonNull Path outputDir,
    @NonNull Duration timeout
)
```

Captures an application backup archive using the specified transport mode.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the backup archive is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the backup to complete. When it expires, the app is force-stopped and the backup fails with an `https://developer.android.com/reference/java/io/IOException.html`. Must be positive. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html` | path to the generated backup archive. A `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()` archive only marks the backup, whose data stays on the device. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if the backup operation fails, or the app does not allow backups |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)` is not positive |

### performBackupAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull Path> performBackupAsync(
    @NonNull BackupTransportMode mode,
    @NonNull Path outputDir
)
```

Captures an application backup archive asynchronously using the specified transport mode.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the backup archive is saved |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the generated backup path |

### performBackupAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull Path> performBackupAsync(
    @NonNull BackupTransportMode mode,
    @NonNull Path outputDir,
    @NonNull Duration timeout
)
```

Captures an application backup archive asynchronously using the specified transport mode.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the backup archive is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the backup to complete. When it expires, the app is force-stopped and the backup fails with an `https://developer.android.com/reference/java/io/IOException.html`. Must be positive, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the generated backup path |

### performRestore

```
abstract @NonNull BackupRestoreController performRestore(@NonNull Path backupFile, @NonNull Duration timeout)
```

Restores application data from a backup archive.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile` | backup archive generated by `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)` |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the restore to complete. When it expires, the app is force-stopped and the restore fails with an `https://developer.android.com/reference/java/io/IOException.html`. Must be positive. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if the restore operation fails or restores no app data, if Google Play services on the device is too old to restore `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestore(java.nio.file.Path,java.time.Duration)`, or if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestore(java.nio.file.Path,java.time.Duration)` is a `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()` archive of another app or of another device |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performRestore(java.nio.file.Path,java.time.Duration)` is not positive |

### performRestoreAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> performRestoreAsync(@NonNull Path backupFile)
```

Restores application data asynchronously from a backup archive.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile` | backup archive generated by `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)` |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### performRestoreAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> performRestoreAsync(@NonNull Path backupFile, @NonNull Duration timeout)
```

Restores application data asynchronously from a backup archive.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html backupFile` | backup archive generated by `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#performBackup(androidx.test.backup.host.BackupTransportMode,java.nio.file.Path,java.time.Duration)` |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the restore to complete. When it expires, the app is force-stopped and the restore fails with an `https://developer.android.com/reference/java/io/IOException.html`. Must be positive, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### pullFile

```
abstract @NonNull BackupRestoreController pullFile(@NonNull String devicePath, @NonNull Path hostDestination)
```

Copies a file from the device to the host machine via `adb pull`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html devicePath` | path to the file on the device |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html hostDestination` | path to write the file on the host |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if copying the file fails |

### pullFileAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> pullFileAsync(@NonNull String devicePath, @NonNull Path hostDestination)
```

Copies a file asynchronously from the device to the host machine.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html devicePath` | path to the file on the device |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html hostDestination` | path to write the file on the host |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### runBackupRestoreFlow

```
abstract @NonNull BackupRestoreController runBackupRestoreFlow(
    @NonNull StorageDomain storage,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode,
    @NonNull BackupRestoreController restoreOn
)
```

Runs a full backup and restore flow for a single storage domain.

Seeds `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` on this device, runs a backup to `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` using `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`, then, on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`, clears app data, restores the backup archive, and verifies `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage` | storage domain to seed and verify |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn` | device controller on which app data is cleared, restored, and verified. Defaults to this controller. Must have the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()` as this controller, and for `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()`, the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance, even when the restore ran on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if any step fails |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` is a `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` has a different `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()`, or a different `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()` with `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()` |

### runBackupRestoreFlow

```
abstract @NonNull BackupRestoreController runBackupRestoreFlow(
    @NonNull List<@NonNull StorageDomain> storages,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode,
    @NonNull BackupRestoreController restoreOn
)
```

Runs a full backup and restore flow for multiple storage domains.

Seeds each domain in `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` on this device, runs a backup to `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` using `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`, then, on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`, clears app data, restores the backup archive, and verifies each domain.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages` | storage domains to seed and verify |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn` | device controller on which app data is cleared, restored, and verified. Defaults to this controller. Must have the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()` as this controller, and for `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()`, the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance, even when the restore ran on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if any step fails |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` is empty or has only `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` has a different `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()`, or a different `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()` with `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()` |

### runBackupRestoreFlowAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> runBackupRestoreFlowAsync(
    @NonNull StorageDomain storage,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode
)
```

Runs a full backup and restore flow asynchronously for a single storage domain.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage` | storage domain to seed and verify. Must not be a `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### runBackupRestoreFlowAsync

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> runBackupRestoreFlowAsync(
    @NonNull List<@NonNull StorageDomain> storages,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode
)
```

Runs a full backup and restore flow asynchronously for multiple storage domains.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages` | storage domains to seed and verify. Must not be empty or hold only `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### runBackupRestoreFlowAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> runBackupRestoreFlowAsync(
    @NonNull StorageDomain storage,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode,
    @NonNull BackupRestoreController restoreOn
)
```

Runs a full backup and restore flow asynchronously for a single storage domain, restoring and verifying on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain storage` | storage domain to seed and verify. Must not be a `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn` | device controller on which app data is cleared, restored, and verified. Must have the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()` as this controller, and for `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()`, the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance, even when the restore ran on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` |

### runBackupRestoreFlowAsync

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> runBackupRestoreFlowAsync(
    @NonNull List<@NonNull StorageDomain> storages,
    @NonNull Path outputDir,
    @NonNull BackupTransportMode mode,
    @NonNull BackupRestoreController restoreOn
)
```

Runs a full backup and restore flow asynchronously for multiple storage domains, restoring and verifying on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/StorageDomain> storages` | storage domains to seed and verify. Must not be empty or hold only `https://developer.android.com/reference/androidx/test/backup/host/StorageDomain.ExcludedData`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/file/Path.html outputDir` | directory where the generated backup file is saved |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode mode` | transport mode to test |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController restoreOn` | device controller on which app data is cleared, restored, and verified. Must have the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#applicationId()` as this controller, and for `https://developer.android.com/reference/androidx/test/backup/host/BackupTransportMode#LOCAL()`, the same `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#serialNumber()`, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance, even when the restore ran on `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(kotlin.collections.List,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` |

### runOnDevice

```
abstract @NonNull BackupActionResult runOnDevice(
    @NonNull String actionClassName,
    @NonNull Map<@NonNull String, @NonNull String> args,
    @NonNull Duration timeout,
    boolean waitForDebugger
)
```

Runs an on-device action inside the target application process.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName` | class name of the `https://developer.android.com/reference/androidx/test/backup/BackupDeviceAction` to run |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args` | arguments to pass to the action. The keys `actionClass`, `argsFile`, `debug` and `redirect_dir` are reserved for the runner. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the action to complete. When it expires, the app is force-stopped and a `https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult.Failure` is returned. Must be positive. |
| `boolean waitForDebugger` | whether the runner waits for a debugger to attach before running |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult` | result of the action execution |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if communicating with the device fails |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDevice(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)` is not positive, or if `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDevice(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)` uses a reserved key |

### runOnDeviceAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupActionResult> runOnDeviceAsync(@NonNull String actionClassName)
```

Runs an on-device action asynchronously inside the target application process.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName` | class name of the `https://developer.android.com/reference/androidx/test/backup/BackupDeviceAction` to run |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the action result |

### runOnDeviceAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupActionResult> runOnDeviceAsync(
    @NonNull String actionClassName,
    @NonNull Map<@NonNull String, @NonNull String> args
)
```

Runs an on-device action asynchronously inside the target application process.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName` | class name of the `https://developer.android.com/reference/androidx/test/backup/BackupDeviceAction` to run |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args` | arguments to pass to the action. The keys `actionClass`, `argsFile`, `debug` and `redirect_dir` are reserved for the runner; with one of them, the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the action result |

### runOnDeviceAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupActionResult> runOnDeviceAsync(
    @NonNull String actionClassName,
    @NonNull Map<@NonNull String, @NonNull String> args,
    @NonNull Duration timeout
)
```

Runs an on-device action asynchronously inside the target application process.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName` | class name of the `https://developer.android.com/reference/androidx/test/backup/BackupDeviceAction` to run |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args` | arguments to pass to the action. The keys `actionClass`, `argsFile`, `debug` and `redirect_dir` are reserved for the runner; with one of them, the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the action to complete. When it expires, the app is force-stopped and a `https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult.Failure` is returned. Must be positive, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the action result |

### runOnDeviceAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupActionResult> runOnDeviceAsync(
    @NonNull String actionClassName,
    @NonNull Map<@NonNull String, @NonNull String> args,
    @NonNull Duration timeout,
    boolean waitForDebugger
)
```

Runs an on-device action asynchronously inside the target application process.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html actionClassName` | class name of the `https://developer.android.com/reference/androidx/test/backup/BackupDeviceAction` to run |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Map.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html> args` | arguments to pass to the action. The keys `actionClass`, `argsFile`, `debug` and `redirect_dir` are reserved for the runner; with one of them, the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/Duration.html timeout` | maximum duration to wait for the action to complete. When it expires, the app is force-stopped and a `https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult.Failure` is returned. Must be positive, or the returned future fails with an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `boolean waitForDebugger` | whether the runner waits for a debugger to attach before running |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupActionResult>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with the action result |

### stopApp

```
abstract @NonNull BackupRestoreController stopApp()
```

Force-stops the target application on the device via `am force-stop`.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if stopping the application fails |

### stopAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> stopAppAsync()
```

Force-stops the target application asynchronously on the device.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |

### uninstallApp

```
abstract @NonNull BackupRestoreController uninstallApp()
```

Uninstalls the target application from the device via `pm uninstall`, if it is installed.

The test APK stays installed. Until `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#installApk(java.nio.file.Path,kotlin.collections.List)` installs the app again, the calls that need it, such as `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDevice(kotlin.String,kotlin.collections.Map,java.time.Duration,kotlin.Boolean)`, `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlow(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode,androidx.test.backup.host.BackupRestoreController)` and `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchApp(kotlin.String,kotlin.collections.Map,kotlin.String)`, fail.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController` | this controller instance |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if uninstalling the application fails |

### uninstallAppAsync

Added in [1.0.0-alpha04](https://developer.android.com/jetpack/androidx/releases/test-backup#1.0.0-alpha04)

```
abstract @NonNull ListenableFuture<@NonNull BackupRestoreController> uninstallAppAsync()
```

Uninstalls the target application asynchronously from the device, if it is installed.

The test APK stays installed. Until `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#installApkAsync(java.nio.file.Path)` installs the app again, the calls that need it, such as `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runOnDeviceAsync(kotlin.String)`, `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#runBackupRestoreFlowAsync(androidx.test.backup.host.StorageDomain,java.nio.file.Path,androidx.test.backup.host.BackupTransportMode)` and `https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController#launchAppAsync()`, fail.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/test/backup/host/BackupRestoreController>` | a `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` with this controller instance |