| page.title=Testing Backup and Restore |
| page.tags=backup, marshmallow, androidm |
| page.keywords=backup, restore, testing |
| |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>In this document</h2> |
| <ol> |
| <li><a href="#HowBackupWorks">How backup works</a></li> |
| <li><a href="#Prerequisites">Prerequisites</a></li> |
| <li><a href="#Preparing">Preparing your device or emulator</a></li> |
| <li><a href="#TestingBackup">Testing backup</a></li> |
| <li><a href="#TestingRestore">Testing restore</a></li> |
| <li><a href="#Troubleshooting">Troubleshooting</a></li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>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. |
| |
| <h2 id="HowBackupWorkso">How backup works</h2> |
| <p>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. |
| |
| <p>The following diagram illustrates how data flows during backup and restore: |
| |
| <img src="images/backup-framework.png" alt="backup-framework"> |
| |
| <p>The <em>Backup Manager Service</em> 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 <em>backup transport</em>, 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. |
| |
| <p><em>Backup Transports</em> 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: |
| </p><ul> |
| <li><strong>Google GMS Transport</strong>(default) - the active backup |
| transport on most devices, part of <a href="https://www.android.com/gms/">Google Mobile Services</a>. This documentation assumes that users are using the |
| Google GMS transport. This transport stores Auto Backup data in a private folder in the |
| user's Google Drive account. Key/Value Backup data is stored in the <a href="{@docRoot}google/backup/index.html">Android Backup Service</a>. |
| <li><strong>Local Transport</strong> - stores backup data locally on the device. |
| This transport is typically used for development/debugging purposes and is not |
| useful in the real world.</li></ul> |
| |
| <p>If a device does not have any backup transports, then the data cannot be |
| backed up. Your app is not adversely affected. |
| |
| <p class="caution"><strong>Caution:</strong> 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. |
| |
| <h2 id="Prerequisites">Prerequisites</h2> |
| <p>You need to know a bit about the following tools: |
| |
| <ul> |
| <li><a href="{@docRoot}studio/command-line/adb.html">adb</a> |
| - to run commands on the device or emulator |
| <li><a href="{@docRoot}studio/command-line/bmgr.html">bmgr</a> - to |
| perform various backup and restore operations |
| <li><a href="{@docRoot}studio/command-line/logcat.html">logcat</a> |
| - to see the output of backup and restore operations.</li></ul> |
| |
| <h2 id="Preparing">Preparing your device or |
| emulator</h2> |
| <p>Prepare your device or emulator for backup testing by working through the |
| following checklist: |
| <ul> |
| <li>For Auto Backup, check that you are using a device or emulator running |
| Android 6.0 (API level 23) or higher.</li> |
| <li>For Key/Value Backup, check that you are using a device or emulator running |
| Android 2.2 (API level 8) or higher.</li> |
| <li>Check that backup and restore is enabled on the device or emulator. There |
| are two ways to check: <ul> |
| <li>On the device, go to <strong>Settings -> Backup & Restore</strong>. |
| <li>From adb shell, run <code>bmgr enable</code></li></ul> |
| <p>On 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. |
| <li>Make sure the GMS Backup Transport is available and active by running the |
| command from adb shell: |
| <pre class="prettyprint">$ bmgr list transports</pre> |
| <p>Then, check the console for the following output: |
| <pre class="prettyprint">android/com.android.internal.backup.LocalTransport |
| * com.google.android.gms/.backup.BackupTransportService</pre> |
| <p>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. |
| </ul> |
| |
| <h2 id="TestingBackup">Testing backup</h2> |
| <p>To initiate a backup of your app, run the following command: |
| |
| <pre class="prettyprint">$ bmgr backupnow <PACKAGE></pre> |
| |
| <p>The <code>backupnow</code> 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: |
| |
| <pre class="prettyprint">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>} |
| </pre> |
| |
| <p>If the <code>backupnow</code> command is not available on your device, you need to run one |
| of the following commands: |
| <ul> |
| <li>For Auto Backups, run: <code>bmgr fullbackup <PACKAGE></code> |
| <li>For Key/Value Backups, schedule and run your backup with the following |
| commands: |
| <pre class="prettyprint">$ bmgr backup <PACKAGE> |
| $ bmgr run</pre> |
| <p><code>bmgr backup</code> adds your app to the Backup Manager's queue. <code>bmgr run</code> initiates the |
| backup operation, which forces the Backup Manager to perform all backup requests |
| that are in its queue. |
| </li></ul> |
| |
| <h2 id="TestingRestore">Testing restore</h2> |
| <p>To manually initiate a restore, run the following command: |
| |
| <pre class="prettyprint">$ bmgr restore <PACKAGE></pre> |
| |
| <p>Warning: This action stops your app and wipes its data before performing the |
| restore operation. |
| |
| <p>Then, check logcat to see the output of the restore procedure. For example: |
| |
| <pre class="prettyprint">V/BackupManagerService: beginRestoreSession: pkg=<PACKAGE> transport=null |
| V/RestoreSession: restorePackage pkg=<PACKAGE> token=368abb4465c5c683 |
| ... |
| I/BackupManagerService: Restore complete. |
| </pre> |
| |
| <p>You also can test automatic restore for your app by uninstalling and |
| reinstalling your app either with <code>adb</code> or through the Google |
| Play Store app. |
| |
| <h2 id="Troubleshooting">Troubleshooting</h2> |
| <p><strong>Exceeded Quota</strong> |
| |
| <p>If you see the the following messages in logcat: |
| |
| <pre class="prettyprint">I/PFTBT: Transport rejected backup of <PACKAGE>, skipping |
| |
| --- or --- |
| |
| I/PFTBT: Transport quota exceeded for package: <PACKAGE> |
| </pre> |
| |
| <p>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. |
| |
| <p><strong>Full Backup Not Possible</strong> |
| |
| <p>If you see the the following message in logcat: |
| |
| <pre class="prettyprint">I/BackupManagerService: Full backup not currently possible -- key/value backup not yet run? |
| </pre> |
| |
| <p>The fullbackup operation failed because no Key/Value Backup operation has yet |
| occurred on the device. Trigger a Key/Value Backup with the command <code>bmgr |
| run </code>and then try again. |