1page.title=針對應用程式進行自動備份
2page.tags=backup, previewresources, androidm
3page.keywords=backup, autobackup, preview
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如果使用者換掉壞掉的裝置或升級到新的裝置時,能夠保存裝置上的資料,就能夠讓使用者獲得良好的體驗。
22執行 Android M 預覽版系統的裝置可以協助在上述情況自動將應用程式資料備份到 Google 雲端硬碟,讓使用者獲得良好的體驗。
23
24如果使用者變更或升級裝置,應用程式資料會自動儲存。
25
26</p>
27
28<p>
29  在執行 Android M 預覽版的裝置上安裝的所有應用程式,預設都會啟用自動備份。不需要任何額外的應用程式程式碼。
30系統則提供使用者不進行自動備份資料的選項。
31您也可以選擇限制要備份應用程式的哪些資料。
32</p>
33
34<p>
35  本文件說明新的系統行為,以及如何指定備份應用程式的哪些資料。
36
37</p>
38
39<h2 id="overview">總覽</h2>
40
41<p>
42  自動備份功能保存應用程式資料的方法,是將使用者裝置上建立的資料上傳到使用者的 Google 雲端硬碟帳戶,然後將資料加密。
43儲存資料不會向您或使用者收費,儲存的資料也不會計入使用者個人雲端硬碟的容量配額。
44在 M 預覽版期間,使用者最多可以為每個 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>如果您的應用程式使用舊版
58 <a href="{@docRoot}google/backup/index.html">Android 備份服務</a>,這個新的行為就不適用,現有的備份行為還是如往常運作。
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
72getCacheDir()} 和 {@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>{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 方法所參考目錄中的檔案。
82
83  </li>
84</ul>
85
86<h2 id="configuring">設定資料備份</h2>
87
88<p>
89  除了上一節所列自動排除的檔案之外,其餘由 M 預覽版裝置上安裝的任何應用程式所建立的資料一律都會備份。
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> 目錄中,名為
120<code>mybackupscheme.xml</code> 的 XML 檔案。
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當您指定
161<code>&lt;include&gt;</code> 標籤時,系統只會備份此元素「指定的資源」<em></em>。
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>。{@link android.content.Context#getDatabasePath getDatabasePath()} 方法或使用
189{@link android.database.sqlite.SQLiteOpenHelper} 類別傳回的資料庫。
190
191    </li>
192
193    <li>
194    <code>sharedpref</code>。{@link android.content.Context#getSharedPreferences getSharedPreferences()}
195方法傳回的 {@link android.content.SharedPreferences} 物件。
196
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  您可以在應用程式的宣示說明元素中將
218<code>android:allowBackup</code> 屬性設定為 <code>false</code>,選擇不要對任何應用程式資料進行自動備份。
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  如果您遇到問題,可以在 [設定] &gt; [備份]<strong></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  如要取得傳輸清單,請呼叫下列命令:
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 雲端通訊</strong> - 使用「Google 雲端通訊」推送通知的應用程式有一個已知問題,亦即備份由「Google 雲端通訊」註冊程序傳回的註冊 ID,會讓還原後的應用程式無法傳送推送通知。在新裝置安裝 API 之後,需要向 API 查詢新的註冊 ID,因此如果之前備份了舊的註冊 ID,就會發生問題。
320
321
322
323
324如要避免發生這個情況,請不要備份包含註冊 ID 的檔案。
325
326  </li>
327</ul>
328