• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;?xml version="1.0" encoding="utf-8"?&gt;
106&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
107        xmlns:tools="http://schemas.android.com/tools"
108        package="com.my.appexample"&gt;
109    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
110    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
111    &lt;app ...
112<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
113    &lt;/app&gt;
114    ...
115&lt;/manifest&gt;
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&lt;?xml version="1.0" encoding="utf-8"?&gt;
128&lt;full-backup-content&gt;
129    &lt;exclude domain="database" path="device_info.db"/&gt;
130&lt;/full-backup-content&gt;
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&lt;full-backup-content&gt;
147    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
148    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
149&lt;/full-backup-content&gt;
150</pre>
151
152<p>
153  次のエレメントと属性を使って、バックアップに含める、または除外するファイルを指定できます。
154
155</p>
156
157<ul>
158  <li>
159  <code>&lt;include&gt;</code>。システムにデフォルトでアプリのすべてのデータをバックアップさせるのではなく、バックアップするリソースを自身で指定する場合、このエレメントを使用します。
160<code>&lt;include&gt;</code> タグを指定すると、システムはこのエレメントで<em>指定されたリソースのみ</em>をバックアップします。
161
162
163  </li>
164
165  <li>
166  <code>&lt;exclude&gt;</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&lt;?xml version="1.0" encoding="utf-8"?&gt;
224&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
225        xmlns:tools="http://schemas.android.com/tools"
226        package="com.my.appexample"&gt;
227    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
228    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
229    &lt;app ...
230<strong>        android:allowBackup="false"&gt;</strong>
231    &lt;/app&gt;
232    ...
233&lt;/manifest&gt;
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>&lt;PACKAGE&gt;</code> パラメータで指定して手動でアプリケーションをバックアップします。
268
269</p>
270
271<pre class="noprettyprint">
272$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
273
274
275<h4>復元のテスト</h4>
276
277<p>
278  アプリのバックアップ後に手動で復元を開始するには、アプリのパッケージ名を <code>&lt;PACKAGE&gt;</code> パラメータで指定します。
279
280</p>
281
282<pre class="noprettyprint">
283$ adb shell bmgr restore &lt;PACKAGE&gt;
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>[設定] &gt; [バックアップ]</strong>でバックアップをオン/オフに切り替え、端末を工場出荷時の状態にリセットするか、次のコマンドを呼び出して、バックアップ データと関連メタデータを消去できます。
301
302
303</p>
304
305<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
306
307<p>
308  <code>&lt;TRANSPORT&gt;</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