• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Автоматическое резервное копирование для приложений
2page.tags=backup, 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 Поэтому одна из важнейших задач при разработке платформы — сделать так, чтобы пользователь не терял свои данные, если его устройство вышло из строя или он решил перейти на новое.
22 Устройства под управлением Android M Preview
23отлично справляются с этой задачей, автоматически выполняя резервное копирование данных
24приложения в Google Drive. Если пользователь перейдет на новое устройство, данные приложений будут автоматически перенесены
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  При автоматическом резервном копировании данные, создаваемые в вашем приложении на устройстве пользователя, отпраляются в
43Google Drive пользователя и происходит их шифрование, что позволяет предотварить потерю данных. Хранилище для ваших данных предоставляется совершенно
44бесплатно. Более того, данные резервного копирования засчитываются вне личной квоты пользователя на использование ресурсов Google Drive. В период использования M Developer Preview
45пользователи могут хранить в облаке до 25 МБ данных для каждого приложения Android.
46</p>
47
48<p>
49  Автоматическое резервное копирование выполняется каждые 24 часа, когда устройство не используется, находится в режиме зарядки и подключено к сети
50Wi-Fi. При соблюдении необходимых условий служба диспетчера резервного копирования отправляет все доступные резервные копии данных
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>файлы в каталоге, на который ссылается метод
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для включения или исключения определенных файлов или каталогов. Служба автоматического резервного копирования
99поддерживает настройку таких правил посредством XML-файла конфигурации и
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>res/xml/</code> проекта приложения, который называется
121<code>mybackupscheme.xml</code>. В этом файле конфигурации содержатся правила резервного
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>: соответствует базе данных, возвращаемой методом
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.SharedPreferences},
195возвращаемому методом
196{@link android.content.Context#getSharedPreferences getSharedPreferences()};
197    </li>
198
199    <li>
200    <code>external</code>: указывает на то, что ресурс находится во внешнем хранилище, и соответствует
201файлу в каталоге, возвращаемом методом
202{@link android.content.Context#getExternalFilesDir getExternalFilesDir()};
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  Затем вручную выполните резервное копирование вашего приложения с помощью следующей команды, указав название
268пакета в виде параметра <code>&lt;PACKAGE&gt;</code>:
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  Чтобы вручную запустить процесс восстановления после резервного копирования данных приложения, выполните следующую команду, указав название
279пакета в виде параметра <code>&lt;PACKAGE&gt;</code>:
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  При возникновении проблем можно стереть резервные копии данных и все связанные с ними метаданные. Для этого
301отключите и повторного включите резервное копирование в разделе <strong>Настройки &gt; Резервное копирование</strong>, восстановите заводские настройки устройства или выполните
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 Cloud Messaging</strong>
320– существует проблема с приложениями, использующими Google Cloud Messaging для отправки push-уведомлений. Она связана с тем,
321что при резервном копировании кода регистрации, возвращаемого Google Cloud Messaging, может нарушиться отправка
322push-уведомлений для восстановленного приложения. Важно запросить у API-интерфейса новый код
323регистрации после установки приложения на новое устройство, что не выполняется в случае резервного копирования
324старого кода регистрации. Чтобы избежать этого, исключите код регистрации из списка файлов
325для резервного копирования.
326  </li>
327</ul>
328