Sunday, October 9, 2016
Auto Backup for Apps made simple
Auto Backup for Apps made simple
Posted by Wojtek Kalici?ski, Developer Advocate, Android
Auto Backup for Apps makes seamless app data backup and restore possible with zero lines of application code. This feature will be available on Android devices running the upcoming M release. All you need to do to enable it for your app is update the targetSdkVersion to 23. You can test it now on the M Developer Preview, where weve enabled Auto Backup for all apps regardless of targetSdkVersion.
Auto Backup for Apps is provided by Google to both users and developers at no charge. Even better, the backup data stored in Google Drive does not count against the users quota. Please note that data transferred may still incur charges from the users cellular / internet provider.
What is Auto-Backup for Apps?
By default, for users that have opted in to backup, all of the data files of an app are automatically copied out to a users Drive. That includes databases, shared preferences and other content in the applications private directory, up to a limit of 25 megabytes per app. Any data residing in the locations denoted by Context.getCacheDir()
, Context.getCodeCacheDir()
and Context.getNoBackupFilesDir()
is excluded from backup. As for files on external storage, only those in Context.getExternalFilesDir()
are backed up.
How to control what is backed up
You can customize what app data is available for backup by creating a backup configuration file in the res/xml
folder and referencing it in your apps manifest:
<application android_fullBackupContent="@xml/mybackupscheme">
In the configuration file, specify <include/>
or <exclude/>
rules that you need to fine tune the behavior of the default backup agent. Please refer to a detailed explanation of the rules syntax available in the documentation.
What to exclude from backup
You may not want to have certain app data eligible for backup. For such data, please use one of the mechanisms above. For example:
- You must exclude any device specific identifiers, either issued by a server or generated on the device. This includes the Google Cloud Messaging (GCM) registration token which, when restored to another device, can render your app on that device unable to receive GCM messages.
- Consider excluding account credentials or other sensitive information information, e.g., by asking the user to reauthenticate the first time they launch a restored app rather than allowing for storage of such information in the backup.
With such a diverse landscape of apps, its important that developers consider how to maximise the benefits to the user of automatic backups. The goal is to reduce the friction of setting up a new device, which in most cases means transferring over user preferences and locally saved content.
For example, if you have the users account stored in shared preferences such that it can be restored on install, they wont have to even think about which account they used to sign in with previously - they can submit their password and get going!
If you support a variety of log-ins (Google Sign-In and other providers, username/password), its simple to keep track of which log-in method was used previously so the user doesnt have to.
Transitioning from key/value backups
If you have previously implemented the legacy, key/value backup by subclassing BackupAgent and setting it in your Manifest (android:backupAgent
), youre just one step away from transitioning to full-data backups. Simply add the android:fullBackupOnly="true"
attribute on <application/>
. This is ignored on pre-M versions of Android, meaning onBackup/onRestore
will still be called, while on M+ devices it lets the system know you wish to use full-data backups while still providing your own BackupAgent.
You can use the same approach even if youre not using key/value backups, but want to do any custom processing in onCreate(), onFullBackup()
or be notified when a restore operation happens in onRestoreFinished()
. Just remember to call super.onFullBackup()
if you want to retain the system implementation of XML include/exclude rules handling.
What is the backup/restore lifecycle?
The data restore happens as part of the package installation, before the user has a chance to launch your app. Backup runs at most once a day, when your device is charging and connected to Wi-Fi. If your app exceeds the data limit (currently set at 25 MB), no more backups will take place and the last saved snapshot will be used for subsequent restores. Your apps process is killed after a full backup happens and before a restore if you invoke it manually through the bmgr command (more about that below).
Test your apps now
Before you begin testing Auto Backup, make sure you have the latest M Developer Preview on your device or emulator. After youve installed your APK, use the adb shell command to access the bmgr tool.
Bmgr is a tool you can use to interact with the Backup Manager:
bmgr run
schedules an immediate backup pass; you need to run this command once after installing your app on the device so that the Backup Manager has a chance to initialize properlybmgr fullbackup <packagename>
starts a full-data backup operation.bmgr restore <packagename>
restores previously backed up data
If you forget to invoke bmgr run
, you might see errors in Logcat when trying the fullbackup
and restore commands. If you are still having problems, make sure you have Backup enabled and a Google account set up in system Settings -> Backup & reset.
Learn more
You can find a sample application that shows how to use Auto Backup on our GitHub. The full documentation is available on developer.android.com
Join the Android M Developer Preview Community on Google+ for more information on Android M features and remember to report any bugs you find with Auto Backup in the bug tracker.
+Android Developers
Available link for download