Auto Backup on Android M


はじめに

このページはAndroid MのAuto Backupに関する共有を目的とするページです
結構便利そうなので、積極的に使ったほうが良いかなーと思っています。
と同時に、自動的にAuto Backup機能がopt-inされてしまうので、ユーザに使ってほしくない場合は、manifestに一行追加しなければいけないようです。

必須条件

  • targetSdkVersionが23以上

概要

Android MにはAuto Backupという機能が追加される。
簡単にいえば「開発コスト、ユーザの操作コストを極力かけずにアプリのユーザデータの自動バックアップを作成する」というもの。

特徴

  • OSがAndroid M以上のすべての端末で動作
  • Google Driveに暗号化された状態でバックアップが作成される。アプリがバックアップのスケジュールを指定できない
  • 作成されたアプリのバックアップはGoogle Driveの保存領域制限(quota)としてカウントされない
  • バックアップは24時間ごとに行われる
  • バックアップは充電中、WiFi接続、アイドル状態の3つの条件が満たされた時に行われる
  • バックアップデータはユーザが新しく携帯を購入した時、アプリをアンインストール後再インストールした際に復元される
  • データ復元の実行は、アプリのインストール時に行われる
  • ユーザがバックアップをオプトアウトしたい場合は設定変更ができる
  • アプリがバックアップをオプトアウトしたい場合は、明示的にオプトアウトするプロパティをmanifestに追加しなければいけない
  • バックアップに必要なクラウドの費用などはすべて無料(通信料は必要)
  • 1アプリ25MBまでバックアップを作成できる。25MBを超えるとバックアップは停止される

バックアップしてはいけないもの

  • デバイス固有のtoken、例えばregistration IDなど
  • センシティブなユーザデータ

Auto Backupのデバッグ方法

Backupのログを有効にする

$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE

Backup Managerを初期化する

$ adb shell bmgr run

Backupを実行する

$ adb shell bmgr fullbackup <PACKAGE>

バックアップデータを復元する

$ adb shell bmgr restore <PACKAGE>

トラブルシューティングをする

もしバックアップのテスト中何らかのエラーが起きてしまった場合下記の3つの方法でバックアップデータを削除することが可能
- 設定でバックアップをOFFにしてONにする
- 工場出荷状態まで戻す
- 下記コマンドを実行する

$ adb shell bmgr wipe <TRANSPORT> <PACKAGE>

はcom.google.android.gmsによって設定されている。transportのリストを表示するには

$ adb shell bmgr list transports

を実行する。

バックアップ機能のオプトアウト

manifest
<application
    android:allowBackup="false"
    ...
/>

バックアップしないものをブラックリスト指定

例では、device_info.db以外すべてをバックアップするように設定

manifest
<application
    android:fullBackupContent="@xml/my_xml_file"
    ...
/>
my_xml_file.xml
<full-backup-content>
    <exclude domain="database"
        path="device_info.db" />
</full-backup-content>

バックアップしないものをホワイトリスト指定

例では、somethin_to_backup.txt以外すべてをバックアップしないように設定

manifest
<application
    android:fullBackupContent="@xml/my_xml_file"
    ...
/>
my_xml_file.xml
<full-backup-content>
    <include domain="file"
        path="somethin_to_backup.txt" />
</full-backup-content>

ドメイン指定できるもの

sharedpref | file | database | external | root

参考文献

http://developer.android.com/preview/backup/index.html
https://github.com/googlesamples/android-AutoBackupForApps