• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=自动备份应用
2page.tags=备份, 预览版资源, 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如果用户更换破损设备或升级至新设备,则保留用户数据对于确保提供卓越的用户体验至关重要。
22在这些情况下,运行 Android M 预览版系统的设备可以通过将应用数据自动备份到 Google Drive,帮助确保提供卓越的用户体验。
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 Drive 帐户并进行加密,来保留这些数据。
43您或用户无需为数据存储付费,且保存的数据不计入用户个人的 Drive 配额。
44在 M 预览版运行期间,用户可针对每个 Android 应用存储多达 25MB 的数据。
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 预览版设备中安装的任何应用所创建的数据均会备份。
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> 属性指定了一个 XML 文件。该文件名为
120<code>mybackupscheme.xml</code>,位于应用开发项目的 <code>res/xml/</code> 目录中。
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>。与通过 {@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  如果遇到问题,可通过在<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  要获取传输列表,请调用下列命令:
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,看是否具有新注册 ID,这一点至关重要。如果已备份旧注册 ID,则不会出现这种情况。
320
321
322
323
324为避免这种现象,请从已备份文件集中排除注册 ID。
325
326  </li>
327</ul>
328