page.title=アプリの自動バックアップ page.tags=バックアップ, previewresources, androidm page.keywords=バックアップ,自動バックアップ,プレビュー page.image=images/cards/card-auto-backup_2x.png @jd:body
アプリ内のデータ作成や環境設定は、多大な労力と時間を必要とする作業です。 端末が破損したり、新しい端末にアップグレードしたりする場合に、そのデータを保持することが、快適な操作性を提供する上で非常に重要です。 Android M Preview を実行する端末では、アプリデータを Google ドライブに自動的にバックアップすることで、前述のような状況でも快適な操作性を実現できます。 アプリデータは、ユーザーが端末を変更したりアップグレードしたりした場合に自動的に復元されます。
自動バックアップは、Android M Preview を実行する端末にインストールされているすべてのアプリで有効になっています。追加のアプリコードは必要ありません。 ユーザーは、自動データ バックアップを使用しないよう選択することもできます。 また、バックアップするアプリのデータを制限することもできます。
このドキュメントでは、新しいシステムの動作と、バックアップするアプリデータを指定する方法について説明します。
自動バックアップ機能では、アプリがユーザーの端末上に作成するデータを、ユーザーの Google ドライブ アカウントにアップロードして暗号化することで、そのデータを保持します。 開発者やユーザーにデータ ストレージの費用が発生することはなく、保存されたデータはユーザー個人のドライブ容量にはカウントされません。 M Preview の期間中、ユーザーは 1 つの Android アプリにつき最大 25 MB までのデータを保存できます。
自動バックアップは、端末がアイドル中で、電源に接続されていて、Wi-Fi に接続されている場合に、24 時間ごとに実行されます。 これらの条件を満たしたとき、バックアップ マネージャー サービスが利用可能なすべてのバックアップ データをクラウドにアップロードします。 ユーザーが新しい端末に切り替えたり、バックアップされたアプリをアンインストールしたり再インストールしたりした場合、復元操作によりバックアップされたデータが新しくインストールされたアプリのデータ ディレクトリにコピーされます。
注: アプリが以前の Android バックアップ サービスを利用している場合、この新しい動作は適用されず、既存のバックアップ動作が引き続き適用されます。
一時ファイルやキャッシュなど、バックアップする必要のないアプリデータもあるため、自動バックアップ サービスではデフォルトで一部のデータ ファイルを除外します。
前のセクションの自動除外ファイル一覧にあるものを除いて、M Preview 端末にインストールされたすべてのアプリで作成されるデータがバックアップ対象です。 そこからさらに、アプリ マニフェストの設定を使用して、アプリからバックアップするデータを制限したり設定したりできます。
アプリに必要なデータとその保存方法によって、特定のファイルやディレクトリを対象とするか、除外するかの明確なルールが必要になる場合があります。 自動バックアップ サービスでは、XML 構成ファイルとアプリ マニフェストを使ってそのようなバックアップ ツールを設定できます。 アプリ マニフェストでは、次の例のように、バックアップ スキームの構成ファイルを指定できます。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample">
<uses-sdk android:minSdkVersion="MNC"/>
<uses-sdk android:targetSdkVersion="MNC"/>
<app ...
android:fullBackupContent="@xml/mybackupscheme">
</app>
...
</manifest>
このサンプル コードでは、android:fullBackupContent 属性がアプリの開発プロジェクトの res/xml/ ディレクトリにある mybackupscheme.xml という名前の XML ファイルを指定しています。
この構成ファイルには、バックアップ対象とするファイルのルールが含まれています。
次のサンプル コードは、バックアップから特定のファイルを除外する構成ファイルを示しています。
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="database" path="device_info.db"/>
</full-backup-content>
この例のバックアップ構成では、特定のデータベース ファイルのみをバックアップから除外しています。 それ以外のファイルはすべてバックアップされます。
バックアップ サービスの設定では、バックアップに含める、または除外するファイルを指定できます。 データ バックアップ設定の xml ファイルの構文は次のとおりです。
<full-backup-content>
<include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
<exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
</full-backup-content>
次のエレメントと属性を使って、バックアップに含める、または除外するファイルを指定できます。
<include>。システムにデフォルトでアプリのすべてのデータをバックアップさせるのではなく、バックアップするリソースを自身で指定する場合、このエレメントを使用します。
<include> タグを指定すると、システムはこのエレメントで指定されたリソースのみをバックアップします。
<exclude>。バックアップから除外するリソースを指定するには、このエレメントを使用します。
システムは、このエレメントで指定されたリソース以外のすべてのアプリ データをバックアップします。
domain. バックアップに含める、または除外するリソースのタイプ。この属性を指定する際に有効な値:
root。リソースがアプリのルート ディレクトリにあることを指定します。
file。
{@link android.content.Context#getFilesDir getFilesDir()} メソッドで返されるディレクトリ内のリソースに相当します。
database。
{@link android.content.Context#getDatabasePath getDatabasePath()} メソッドや
{@link android.database.sqlite.SQLiteOpenHelper} クラスを使用して返されるデータベースに相当します。
sharedpref。
{@link android.content.Context#getSharedPreferences getSharedPreferences()} メソッドで返される
{@link android.content.SharedPreferences} オブジェクトに相当します。
external。リソースが外部ストレージにあることを指定し、
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
メソッドで返されるディレクトリ内のファイルに相当します。
path。バックアップに含める、または除外するリソースへのファイルパス。
マニフェストのアプリ エレメントにある android:allowBackup 属性を false に設定すると、一切のデータを自動バックアップしないように選択できます。
この設定を、次のサンプル コードで示します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample">
<uses-sdk android:minSdkVersion="MNC"/>
<uses-sdk android:targetSdkVersion="MNC"/>
<app ...
android:allowBackup="false">
</app>
...
</manifest>
バックアップ設定を作成したら、アプリでデータが保存され、正常に復元されることをテストして確認する必要があります。
バックアップで XML ファイルがどのように解析されるかを確認するため、テストのバックアップを実行する前にログ機能を有効にします。
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
手動でバックアップを実行するには、まず次のコマンドを呼び出してバックアップ マネージャーを初期化する必要があります。
$ adb shell bmgr run
次に、次のコマンドを使って、アプリのパッケージ名を <PACKAGE> パラメータで指定して手動でアプリケーションをバックアップします。
$ adb shell bmgr fullbackup <PACKAGE>
アプリのバックアップ後に手動で復元を開始するには、アプリのパッケージ名を <PACKAGE> パラメータで指定します。
$ adb shell bmgr restore <PACKAGE>
警告: このアクションを実行すると、アプリが停止し、復元操作を実行する前にデータが消去されます。
アプリをアンインストールしてから再インストールすることで、アプリの復元プロセスを開始します。アプリのインストールが完了すると、アプリデータが自動的にクラウドから復元されます。
問題が発生した場合は、[設定] > [バックアップ]でバックアップをオン/オフに切り替え、端末を工場出荷時の状態にリセットするか、次のコマンドを呼び出して、バックアップ データと関連メタデータを消去できます。
$ adb shell bmgr wipe <TRANSPORT> <PACKAGE>
<TRANSPORT> には、com.google.android.gms というプレフィクスが付く必要があります。
Transport の一覧を取得するには、次のコマンドを呼び出します。
$ adb shell bmgr list transports
自動バックアップ サービスには、次のような既知の問題があります。