1page.title=アプリの自動バックアップ 2page.tags=バックアップ, previewresources, androidm 3page.keywords=バックアップ,自動バックアップ,プレビュー 4page.image=images/cards/card-auto-backup_2x.png 5@jd:body 6 7<div id="qv-wrapper"> 8 <div id="qv"> 9 <h2>本書の内容</h2> 10 <ol> 11 <li><a href="#overview">概要</a></li> 12 <li><a href="#configuring">データのバックアップを設定する</a></li> 13 <li><a href="#testing">バックアップ設定をテストする</a></li> 14 <li><a href="#issues">既知の問題</a></li> 15 </ol> 16 </div> 17</div> 18 19<p> 20 アプリ内のデータ作成や環境設定は、多大な労力と時間を必要とする作業です。 21端末が破損したり、新しい端末にアップグレードしたりする場合に、そのデータを保持することが、快適な操作性を提供する上で非常に重要です。 22Android M Preview を実行する端末では、アプリデータを Google ドライブに自動的にバックアップすることで、前述のような状況でも快適な操作性を実現できます。 23 24アプリデータは、ユーザーが端末を変更したりアップグレードしたりした場合に自動的に復元されます。 25 26</p> 27 28<p> 29 自動バックアップは、Android M Preview を実行する端末にインストールされているすべてのアプリで有効になっています。追加のアプリコードは必要ありません。 30ユーザーは、自動データ バックアップを使用しないよう選択することもできます。 31また、バックアップするアプリのデータを制限することもできます。 32</p> 33 34<p> 35 このドキュメントでは、新しいシステムの動作と、バックアップするアプリデータを指定する方法について説明します。 36 37</p> 38 39<h2 id="overview">概要</h2> 40 41<p> 42 自動バックアップ機能では、アプリがユーザーの端末上に作成するデータを、ユーザーの Google ドライブ アカウントにアップロードして暗号化することで、そのデータを保持します。 43開発者やユーザーにデータ ストレージの費用が発生することはなく、保存されたデータはユーザー個人のドライブ容量にはカウントされません。 44M Preview の期間中、ユーザーは 1 つの Android アプリにつき最大 25 MB までのデータを保存できます。 45 46</p> 47 48<p> 49 自動バックアップは、端末がアイドル中で、電源に接続されていて、Wi-Fi に接続されている場合に、24 時間ごとに実行されます。 50これらの条件を満たしたとき、バックアップ マネージャー サービスが利用可能なすべてのバックアップ データをクラウドにアップロードします。 51ユーザーが新しい端末に切り替えたり、バックアップされたアプリをアンインストールしたり再インストールしたりした場合、復元操作によりバックアップされたデータが新しくインストールされたアプリのデータ ディレクトリにコピーされます。 52 53 54</p> 55 56<p class="note"> 57 <strong>注:</strong> アプリが以前の <a href="{@docRoot}google/backup/index.html">Android バックアップ サービス</a>を利用している場合、この新しい動作は適用されず、既存のバックアップ動作が引き続き適用されます。 58 59 60</p> 61 62 63<h3 id="auto-exclude">自動的に除外されたデータファイル</h3> 64 65<p> 66 一時ファイルやキャッシュなど、バックアップする必要のないアプリデータもあるため、自動バックアップ サービスではデフォルトで一部のデータ ファイルを除外します。 67 68</p> 69 70<ul> 71 <li>{@link android.content.Context#getCacheDir 72 getCacheDir()} メソッドと {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()} 73 メソッドに参照されるディレクトリ内のファイル。 74 </li> 75 76 <li> 77{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 78 メソッドに参照されるディレクトリ内のものを除く、外部ストレージ内のファイル。 79 </li> 80 81 <li> 82{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} メソッドに参照されるディレクトリ内のファイル。 83 </li> 84</ul> 85 86<h2 id="configuring">データのバックアップを設定する</h2> 87 88<p> 89 前のセクションの自動除外ファイル一覧にあるものを除いて、M Preview 端末にインストールされたすべてのアプリで作成されるデータがバックアップ対象です。 90そこからさらに、アプリ マニフェストの設定を使用して、アプリからバックアップするデータを制限したり設定したりできます。 91 92</p> 93 94<h3 id="include-exclude">対象データと除外データ</h3> 95 96<p> 97 アプリに必要なデータとその保存方法によって、特定のファイルやディレクトリを対象とするか、除外するかの明確なルールが必要になる場合があります。 98自動バックアップ サービスでは、XML 構成ファイルとアプリ マニフェストを使ってそのようなバックアップ ツールを設定できます。 99 100アプリ マニフェストでは、次の例のように、バックアップ スキームの構成ファイルを指定できます。 101 102</p> 103 104<pre> 105<?xml version="1.0" encoding="utf-8"?> 106<manifest xmlns:android="http://schemas.android.com/apk/res/android" 107 xmlns:tools="http://schemas.android.com/tools" 108 package="com.my.appexample"> 109 <uses-sdk android:minSdkVersion="MNC"/> 110 <uses-sdk android:targetSdkVersion="MNC"/> 111 <app ... 112<strong> android:fullBackupContent="@xml/mybackupscheme"></strong> 113 </app> 114 ... 115</manifest> 116</pre> 117 118<p> 119 このサンプル コードでは、<code>android:fullBackupContent</code> 属性がアプリの開発プロジェクトの <code>res/xml/</code> ディレクトリにある <code>mybackupscheme.xml</code> という名前の XML ファイルを指定しています。 120 121この構成ファイルには、バックアップ対象とするファイルのルールが含まれています。 122次のサンプル コードは、バックアップから特定のファイルを除外する構成ファイルを示しています。 123 124</p> 125 126<pre> 127<?xml version="1.0" encoding="utf-8"?> 128<full-backup-content> 129 <exclude domain="database" path="device_info.db"/> 130</full-backup-content> 131</pre> 132 133<p> 134 この例のバックアップ構成では、特定のデータベース ファイルのみをバックアップから除外しています。 135 それ以外のファイルはすべてバックアップされます。 136</p> 137 138<h4>バックアップ設定の構文</h4> 139 140<p> 141 バックアップ サービスの設定では、バックアップに含める、または除外するファイルを指定できます。 142データ バックアップ設定の xml ファイルの構文は次のとおりです。 143</p> 144 145<pre> 146<full-backup-content> 147 <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> 148 <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> 149</full-backup-content> 150</pre> 151 152<p> 153 次のエレメントと属性を使って、バックアップに含める、または除外するファイルを指定できます。 154 155</p> 156 157<ul> 158 <li> 159 <code><include></code>。システムにデフォルトでアプリのすべてのデータをバックアップさせるのではなく、バックアップするリソースを自身で指定する場合、このエレメントを使用します。 160<code><include></code> タグを指定すると、システムはこのエレメントで<em>指定されたリソースのみ</em>をバックアップします。 161 162 163 </li> 164 165 <li> 166 <code><exclude></code>。バックアップから除外するリソースを指定するには、このエレメントを使用します。 167システムは、このエレメントで指定されたリソース以外のすべてのアプリ データをバックアップします。 168 169 </li> 170 171 <li> 172 <code>domain.</code> バックアップに含める、または除外するリソースのタイプ。この属性を指定する際に有効な値: 173 174 </li> 175 176 <li style="list-style: none"> 177 <ul> 178 <li> 179 <code>root</code>。リソースがアプリのルート ディレクトリにあることを指定します。 180 </li> 181 182 <li> 183 <code>file</code>。 184{@link android.content.Context#getFilesDir getFilesDir()} メソッドで返されるディレクトリ内のリソースに相当します。 185 </li> 186 187 <li> 188 <code>database</code>。 189{@link android.content.Context#getDatabasePath getDatabasePath()} メソッドや 190{@link android.database.sqlite.SQLiteOpenHelper} クラスを使用して返されるデータベースに相当します。 191 </li> 192 193 <li> 194 <code>sharedpref</code>。 195{@link android.content.Context#getSharedPreferences getSharedPreferences()} メソッドで返される 196{@link android.content.SharedPreferences} オブジェクトに相当します。 197 </li> 198 199 <li> 200 <code>external</code>。リソースが外部ストレージにあることを指定し、 201{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 202 メソッドで返されるディレクトリ内のファイルに相当します。 203 </li> 204 205 <li> 206 <code>path</code>。バックアップに含める、または除外するリソースへのファイルパス。 207 208 </li> 209 </ul> 210 </li> 211</ul> 212 213 214<h3 id="prohibit">データ バックアップの禁止</h3> 215 216<p> 217 マニフェストのアプリ エレメントにある <code>android:allowBackup</code> 属性を <code>false</code> に設定すると、一切のデータを自動バックアップしないように選択できます。 218 219この設定を、次のサンプル コードで示します。 220</p> 221 222<pre> 223<?xml version="1.0" encoding="utf-8"?> 224<manifest xmlns:android="http://schemas.android.com/apk/res/android" 225 xmlns:tools="http://schemas.android.com/tools" 226 package="com.my.appexample"> 227 <uses-sdk android:minSdkVersion="MNC"/> 228 <uses-sdk android:targetSdkVersion="MNC"/> 229 <app ... 230<strong> android:allowBackup="false"></strong> 231 </app> 232 ... 233</manifest> 234</pre> 235 236 237<h2 id="testing">バックアップ設定をテストする</h2> 238 239<p> 240 バックアップ設定を作成したら、アプリでデータが保存され、正常に復元されることをテストして確認する必要があります。 241 242</p> 243 244 245<h4>バックアップのログの有効化</h4> 246 247<p> 248 バックアップで XML ファイルがどのように解析されるかを確認するため、テストのバックアップを実行する前にログ機能を有効にします。 249 250</p> 251 252<pre class="noprettyprint"> 253$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE 254</pre> 255 256<h4>バックアップのテスト</h4> 257 258<p>手動でバックアップを実行するには、まず次のコマンドを呼び出してバックアップ マネージャーを初期化する必要があります。 259 260</p> 261 262<pre class="noprettyprint"> 263$ adb shell bmgr run 264</pre> 265 266<p> 267 次に、次のコマンドを使って、アプリのパッケージ名を <code><PACKAGE></code> パラメータで指定して手動でアプリケーションをバックアップします。 268 269</p> 270 271<pre class="noprettyprint"> 272$ adb shell bmgr fullbackup <PACKAGE></pre> 273 274 275<h4>復元のテスト</h4> 276 277<p> 278 アプリのバックアップ後に手動で復元を開始するには、アプリのパッケージ名を <code><PACKAGE></code> パラメータで指定します。 279 280</p> 281 282<pre class="noprettyprint"> 283$ adb shell bmgr restore <PACKAGE> 284</pre> 285 286<p class="warning"> 287 <b>警告:</b> このアクションを実行すると、アプリが停止し、復元操作を実行する前にデータが消去されます。 288 289</p> 290 291<p> 292 アプリをアンインストールしてから再インストールすることで、アプリの復元プロセスを開始します。アプリのインストールが完了すると、アプリデータが自動的にクラウドから復元されます。 293 294</p> 295 296 297<h4>バックアップのトラブルシューティング</h4> 298 299<p> 300 問題が発生した場合は、<strong>[設定] > [バックアップ]</strong>でバックアップをオン/オフに切り替え、端末を工場出荷時の状態にリセットするか、次のコマンドを呼び出して、バックアップ データと関連メタデータを消去できます。 301 302 303</p> 304 305<pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre> 306 307<p> 308 <code><TRANSPORT></code> には、<code>com.google.android.gms</code> というプレフィクスが付く必要があります。 309 Transport の一覧を取得するには、次のコマンドを呼び出します。 310</p> 311 312<pre>$ adb shell bmgr list transports</pre> 313 314<h2 id="issues">既知の問題</h2> 315 316<p>自動バックアップ サービスには、次のような既知の問題があります。</p> 317 318<ul> 319 <li><strong>Google Cloud Messaging</strong> - プッシュ通知に Google Cloud Messaging を使用するアプリの場合、Messaging の登録時に返された登録 ID をバックアップすると、復元されたアプリのプッシュ通知が破損することがあるという既知の問題があります。古い登録 ID がバックアップされている場合を除いて、新しい端末へのインストール後は、新しい 登録 ID 用の API を照会することが重要です。 320 321 322 323 324これを回避するには、バックアップ対象ファイルから登録 ID を除外します。 325 326 </li> 327</ul> 328