page.title=Testing Backup and Restore page.tags=backup, marshmallow, androidm page.keywords=backup, restore, testing @jd:body
This page shows you how to manually trigger Auto Backup, Key/Value Backup, and restore operations to ensure your app saves and restores data properly.
The section describes various pieces in the Android backup framework and how they interact with apps that support Auto Backup and Key/Value Backup. During the app development phase, most of the inner working of the framework were abstracted away, so you didn't need to know this information. However, during the testing phase, an understanding of these concepts is important.
The following diagram illustrates how data flows during backup and restore:
The Backup Manager Service is an Android system service which orchestrates and initiates backup and restore operations. The service is accessible through the {@link android.app.backup.BackupManager} API. During a backup operation, the service queries your app for backup data, then hands it to the backup transport, which then archives the data. During a restore operation, the backup manager service retrieves the backup data from the backup transport and restores the data to the device.
Backup Transports are Android components that are responsible for storing and retrieving backups. An Android device can have zero or more backup transports, but only one of those transports can be marked active. The available backup transports may differ from device to device (due to customizations by device manufacturers and service providers), but most Google Play enabled devices ship with the following transports:
If a device does not have any backup transports, then the data cannot be backed up. Your app is not adversely affected.
Caution: Because the backup transport can differ from device to device, Android cannot guarantee the security of your data while using backup. Be cautious about using backup to store sensitive data, such as usernames and passwords.
You need to know a bit about the following tools:
Prepare your device or emulator for backup testing by working through the following checklist:
bmgr enableOn physical devices, backup and restore is typically enabled during the initial setup wizard. Emulators do not run the setup wizard, so don't forget to enable backup and specify a backup account in device settings.
$ bmgr list transports
Then, check the console for the following output:
android/com.android.internal.backup.LocalTransport * com.google.android.gms/.backup.BackupTransportService
Physical devices without Google Play and emulators without Google APIs might not include the GMS Backup Transport. This article assumes you are using the GMS Backup Transport. You can test backup and restore with other backup transports, but the procedure and output can differ.
To initiate a backup of your app, run the following command:
$ bmgr backupnow <PACKAGE>
The backupnow command runs either a Key/Value Backup or Auto Backup depending on
the package's manifest declarations. Check logcat to see the output of the
backup procedure. For example:
D/BackupManagerService: fullTransportBackup()
I/GmsBackupTransport: Attempt to do full backup on <PACKAGE>
---- or ----
V/BackupManagerService: Scheduling immediate backup pass
D/PerformBackupTask: starting key/value Backup of BackupRequest{pkg=<PACKAGE>}
If the backupnow command is not available on your device, you need to run one
of the following commands:
bmgr fullbackup <PACKAGE>
$ bmgr backup <PACKAGE> $ bmgr run
bmgr backup adds your app to the Backup Manager's queue. bmgr run initiates the
backup operation, which forces the Backup Manager to perform all backup requests
that are in its queue.
To manually initiate a restore, run the following command:
$ bmgr restore <PACKAGE>
Warning: This action stops your app and wipes its data before performing the restore operation.
Then, check logcat to see the output of the restore procedure. For example:
V/BackupManagerService: beginRestoreSession: pkg=<PACKAGE> transport=null V/RestoreSession: restorePackage pkg=<PACKAGE> token=368abb4465c5c683 ... I/BackupManagerService: Restore complete.
You also can test automatic restore for your app by uninstalling and
reinstalling your app either with adb or through the Google
Play Store app.
Exceeded Quota
If you see the the following messages in logcat:
I/PFTBT: Transport rejected backup of <PACKAGE>, skipping --- or --- I/PFTBT: Transport quota exceeded for package: <PACKAGE>
Your app has exceeded the quota and has been banned from backing up data on this device. To lift the ban, either factory reset your device or change the backup account.
Full Backup Not Possible
If you see the the following message in logcat:
I/BackupManagerService: Full backup not currently possible -- key/value backup not yet run?
The fullbackup operation failed because no Key/Value Backup operation has yet
occurred on the device. Trigger a Key/Value Backup with the command bmgr
run and then try again.