| page.title=Автоматическое резервное копирование для приложений |
| page.tags=backup, previewresources, androidm |
| page.keywords=резервное копирование, автоматическое резервное копирование, предварительная версия |
| page.image=images/cards/card-auto-backup_2x.png |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>Содержание документа</h2> |
| <ol> |
| <li><a href="#overview">Обзор</a></li> |
| <li><a href="#configuring">Настройка резервного копирования данных</a></li> |
| <li><a href="#testing">Тестирование конфигурации резервного копирования</a></li> |
| <li><a href="#issues">Известные проблемы</a></li> |
| </ol> |
| </div> |
| </div> |
| |
| <p> |
| Пользователи зачастую тратят очень много времени и усилий на создание данных и настройку параметров в приложениях. |
| Поэтому одна из важнейших задач при разработке платформы — сделать так, чтобы пользователь не терял свои данные, если его устройство вышло из строя или он решил перейти на новое. |
| Устройства под управлением Android M Preview |
| отлично справляются с этой задачей, автоматически выполняя резервное копирование данных |
| приложения в Google Drive. Если пользователь перейдет на новое устройство, данные приложений будут автоматически перенесены |
| на него. |
| </p> |
| |
| <p> |
| Автоматическое резервное копирование предусмотрено для всех приложений, установленных на устройствах под управлением Android M Preview. При этом |
| вам не нужно добавлять в приложение дополнительный код. Система сама предложит пользователю возможность включить или отключить |
| автоматическое резервное копирование данных. Вы также можете указать, для каких данных приложения следует создавать резервные копии, а для каких — нет. |
| </p> |
| |
| <p> |
| В этой статье описывается новое поведение системы и порядок указания данных приложения, |
| подлежащих резервному копированию. |
| </p> |
| |
| <h2 id="overview">Обзор</h2> |
| |
| <p> |
| При автоматическом резервном копировании данные, создаваемые в вашем приложении на устройстве пользователя, отпраляются в |
| Google Drive пользователя и происходит их шифрование, что позволяет предотварить потерю данных. Хранилище для ваших данных предоставляется совершенно |
| бесплатно. Более того, данные резервного копирования засчитываются вне личной квоты пользователя на использование ресурсов Google Drive. В период использования M Developer Preview |
| пользователи могут хранить в облаке до 25 МБ данных для каждого приложения Android. |
| </p> |
| |
| <p> |
| Автоматическое резервное копирование выполняется каждые 24 часа, когда устройство не используется, находится в режиме зарядки и подключено к сети |
| Wi-Fi. При соблюдении необходимых условий служба диспетчера резервного копирования отправляет все доступные резервные копии данных |
| в облако. Когда пользователь переходит на использование нового устройства или удаляет и заново устанавливает |
| приложение, для которого имеется резервная копия, выполняется операция восстановления и резервные копии данных переносятся в каталог |
| переустановленного приложения. |
| </p> |
| |
| <p class="note"> |
| <strong>Примечание.</strong> Если ваше приложение использует устаревшую |
| <a href="{@docRoot}google/backup/index.html">службу резервного копирования Android</a>, то |
| вместо нового поведения системы будет применяться существующий механизм резервного копирования. |
| </p> |
| |
| |
| <h3 id="auto-exclude">Автоматически исключаемые файлы данных</h3> |
| |
| <p> |
| Не все данные приложения подлежат резервному копированию. В частности, временные файлы и кэш сохранять не нужно. Поэтому служба |
| автоматического резервного копирования по умолчанию исключает из этого процесса определенные файлы данных: |
| </p> |
| |
| <ul> |
| <li>файлы в каталогах, на которые ссылаются методы {@link android.content.Context#getCacheDir |
| getCacheDir()} и {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}; |
| |
| </li> |
| |
| <li>файлы во внешнем хранилище, кроме файлов, находящихся в каталогах, на которые ссылается метод |
| {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}; |
| |
| </li> |
| |
| <li>файлы в каталоге, на который ссылается метод |
| {@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()}. |
| </li> |
| </ul> |
| |
| <h2 id="configuring">Настройка резервного копирования данных</h2> |
| |
| <p> |
| Резервные копии создаются для данных, создаваемых любым приложением, которое установлено на устройстве под управлением M Preview, исключение составляют только |
| файлы, обозначенные в предыдущем разделе. Если вы хотите самостоятельно определить, |
| какие данные вашего приложения подлежат резервному копированию, а какие нет, это можно сделать с помощью соответствующих настроек в манифесте приложения. |
| </p> |
| |
| <h3 id="include-exclude">Включение или исключение данных</h3> |
| |
| <p> |
| В зависимости о того, какие данные требуются вашему приложению и как вы их сохраняете, вам может потребоваться задать определенные правила |
| для включения или исключения определенных файлов или каталогов. Служба автоматического резервного копирования |
| поддерживает настройку таких правил посредством XML-файла конфигурации и |
| манифеста приложения. В манифесте приложения можно указать файл конфигурации схемы резервного копирования, как показано в примере |
| ниже. |
| </p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:tools="http://schemas.android.com/tools" |
| package="com.my.appexample"> |
| <uses-sdk android:minSdkVersion="MNC"/> |
| <uses-sdk android:targetSdkVersion="MNC"/> |
| <app ... |
| <strong> android:fullBackupContent="@xml/mybackupscheme"></strong> |
| </app> |
| ... |
| </manifest> |
| </pre> |
| |
| <p> |
| В этом примере кода атрибут <code>android:fullBackupContent</code> задает XML-файл, |
| расположенный в каталоге <code>res/xml/</code> проекта приложения, который называется |
| <code>mybackupscheme.xml</code>. В этом файле конфигурации содержатся правила резервного |
| копирования файлов. В следующем примере кода демонстрируется файл конфигурации, в котором из процесса резервного копирования исключается определенный |
| файл: |
| </p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <full-backup-content> |
| <exclude domain="database" path="device_info.db"/> |
| </full-backup-content> |
| </pre> |
| |
| <p> |
| В этом примере конфигурации резервного копирования из операции исключается только определенный файл базы данных. |
| Для всех остальных файлов будут создаваться резервные копии. |
| </p> |
| |
| <h4>Синтаксис конфигурации резервного копирования</h4> |
| |
| <p> |
| Служба резервного копирования предоставляет вам возможность указать, какие файлы следует включить в процесс резервного копирования или |
| исключить из него. Синтаксис XML-файла конфигурации резервного копирования данных следующий: |
| </p> |
| |
| <pre> |
| <full-backup-content> |
| <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> |
| <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> |
| </full-backup-content> |
| </pre> |
| |
| <p> |
| С помощью перечисленных ниже элементов и атрибутов можно указать файлы, которые вы хотите включить в процесс резервного копирования или исключить из |
| него: |
| </p> |
| |
| <ul> |
| <li> |
| <code><include></code>: используйте этот элемент, если хотите, чтобы система не создавала резервные копии всех данных в вашем приложении, как это происходит по умолчанию, а копировала только определенный набор данных. |
| Если указан тег |
| <code><include></code>, система создает резервные копии <em>только для ресурсов</em> |
| с этим элементом. |
| </li> |
| |
| <li> |
| <code><exclude></code>: используйте этот элемент, чтобы указать набор ресурсов, которые |
| следует исключить из процесса резервного копирования. В таком случае система будет создавать резервные копии всех данных в приложении, кроме ресурсов с этим |
| элементом; |
| </li> |
| |
| <li> |
| <code>domain.</code>: тип ресурса, который необходимо включить в резервное копирование или исключить из него. Допустимые |
| значения для этого атрибута могут быть следующие: |
| </li> |
| |
| <li style="list-style: none"> |
| <ul> |
| <li> |
| <code>root</code>: указывает на то, что ресурс находится в корневом каталоге приложения; |
| </li> |
| |
| <li> |
| <code>file</code>: соответствует ресурсу в каталоге, возвращаемом методом |
| {@link android.content.Context#getFilesDir getFilesDir()}; |
| </li> |
| |
| <li> |
| <code>database</code>: соответствует базе данных, возвращаемой методом |
| {@link android.content.Context#getDatabasePath getDatabasePath()} или классом |
| {@link android.database.sqlite.SQLiteOpenHelper}; |
| </li> |
| |
| <li> |
| <code>sharedpref</code>: соответствует объекту {@link android.content.SharedPreferences}, |
| возвращаемому методом |
| {@link android.content.Context#getSharedPreferences getSharedPreferences()}; |
| </li> |
| |
| <li> |
| <code>external</code>: указывает на то, что ресурс находится во внешнем хранилище, и соответствует |
| файлу в каталоге, возвращаемом методом |
| {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}; |
| </li> |
| |
| <li> |
| <code>path</code>: путь к ресурсу, который необходимо включить в резервное копирование или исключить |
| из него. |
| </li> |
| </ul> |
| </li> |
| </ul> |
| |
| |
| <h3 id="prohibit">Запрет резервного копирования данных</h3> |
| |
| <p> |
| Можно запретить автоматическое резервное копирование любых данных приложения. Для этого в манифесте в элементе приложения задайте для атрибута |
| <code>android:allowBackup</code> значение<code>false</code>. |
| Как это делается, видно в примере кода ниже: |
| </p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:tools="http://schemas.android.com/tools" |
| package="com.my.appexample"> |
| <uses-sdk android:minSdkVersion="MNC"/> |
| <uses-sdk android:targetSdkVersion="MNC"/> |
| <app ... |
| <strong> android:allowBackup="false"></strong> |
| </app> |
| ... |
| </manifest> |
| </pre> |
| |
| |
| <h2 id="testing">Тестирование конфигурации резервного копирования</h2> |
| |
| <p> |
| После создания конфигурации резервного копирования необходимо ее протестировать и убедиться, что ваше приложение сохраняет данные и впоследствии |
| они могут быть должным образом восстановлены. |
| </p> |
| |
| |
| <h4>Включение журнала резервного копирования</h4> |
| |
| <p> |
| Чтобы упростить для себя анализ обработки вашего XML-файла функцией резервного копирования, прежде чем приступать к тестированию, |
| включите ведение журнала: |
| </p> |
| |
| <pre class="noprettyprint"> |
| $ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE |
| </pre> |
| |
| <h4>Тестирование резервного копирования</h4> |
| |
| <p>Чтобы вручную запустить процесс резервного копирования, сначала активируйте диспетчер резервного копирования, выполнив следующую |
| команду: |
| </p> |
| |
| <pre class="noprettyprint"> |
| $ adb shell bmgr run |
| </pre> |
| |
| <p> |
| Затем вручную выполните резервное копирование вашего приложения с помощью следующей команды, указав название |
| пакета в виде параметра <code><PACKAGE></code>: |
| </p> |
| |
| <pre class="noprettyprint"> |
| $ adb shell bmgr fullbackup <PACKAGE></pre> |
| |
| |
| <h4>Тестирование восстановления</h4> |
| |
| <p> |
| Чтобы вручную запустить процесс восстановления после резервного копирования данных приложения, выполните следующую команду, указав название |
| пакета в виде параметра <code><PACKAGE></code>: |
| </p> |
| |
| <pre class="noprettyprint"> |
| $ adb shell bmgr restore <PACKAGE> |
| </pre> |
| |
| <p class="warning"> |
| <b>Предупреждение.</b> При выполнении этого действия перед операцией |
| восстановления работа приложения будет остановлена и все его данные удалены. |
| </p> |
| |
| <p> |
| Чтобы запустить процесс восстановления, удалите ваше приложение и снова установите его. Данные |
| приложения будут автоматически восстановлены из облака сразу по завершении установки. |
| </p> |
| |
| |
| <h4>Устранение неполадок резервного копирования</h4> |
| |
| <p> |
| При возникновении проблем можно стереть резервные копии данных и все связанные с ними метаданные. Для этого |
| отключите и повторного включите резервное копирование в разделе <strong>Настройки > Резервное копирование</strong>, восстановите заводские настройки устройства или выполните |
| следующую команду: |
| </p> |
| |
| <pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre> |
| |
| <p> |
| Перед значением <code><TRANSPORT></code> должен быть префикс <code>com.google.android.gms</code>. |
| Чтобы получить список транспорта, выполните следующую команду: |
| </p> |
| |
| <pre>$ adb shell bmgr list transports</pre> |
| |
| <h2 id="issues">Известные проблемы</h2> |
| |
| <p>Ниже перечислены известные проблемы в работе службы автоматического резервного копирования.</p> |
| |
| <ul> |
| <li><strong>Google Cloud Messaging</strong> |
| – существует проблема с приложениями, использующими Google Cloud Messaging для отправки push-уведомлений. Она связана с тем, |
| что при резервном копировании кода регистрации, возвращаемого Google Cloud Messaging, может нарушиться отправка |
| push-уведомлений для восстановленного приложения. Важно запросить у API-интерфейса новый код |
| регистрации после установки приложения на новое устройство, что не выполняется в случае резервного копирования |
| старого кода регистрации. Чтобы избежать этого, исключите код регистрации из списка файлов |
| для резервного копирования. |
| </li> |
| </ul> |