Резервное копирование пользовательских данных с помощью Auto Backup

Функция автоматического резервного копирования приложений автоматически создает резервные копии данных пользователя из приложений, работающих на Android 6.0 (уровень API 23) или выше. Android сохраняет данные приложений, загружая их на Google Диск пользователя, где они защищены учётными данными Google. Резервное копирование сквозное шифрование на устройствах под управлением Android 9 и выше с использованием PIN-кода, графического ключа или пароля. Каждое приложение может выделить до 25 МБ данных для резервного копирования на одного пользователя. Плата за хранение данных резервных копий не взимается. Ваше приложение может настроить процесс резервного копирования или отказаться от него, отключив резервное копирование .

Обзор вариантов резервного копирования Android и рекомендации по выбору данных для резервного копирования и восстановления см. в обзоре резервного копирования данных .

Резервные копии файлов

По умолчанию функция автоматического резервного копирования включает файлы в большинстве каталогов, назначенных вашему приложению системой:

  • Файлы общих настроек

  • Файлы, сохраненные во внутреннем хранилище вашего приложения и доступные с помощью getFilesDir() или getDir(String, int)

  • Файлы в каталоге, возвращаемом getDatabasePath(String) , который также включает файлы, созданные с помощью класса SQLiteOpenHelper

  • Файлы на внешнем хранилище в каталоге, возвращаемом getExternalFilesDir(String)

Автоматическое резервное копирование исключает файлы в каталогах, возвращаемых методами getCacheDir() , getCodeCacheDir() и getNoBackupFilesDir() . Файлы, сохранённые в этих каталогах, нужны только временно и намеренно исключаются из операций резервного копирования.

Вы можете настроить приложение для включения и исключения определённых файлов. Подробнее см. в разделе «Включение и исключение файлов» .

Резервное местоположение

Данные резервных копий хранятся в личной папке в аккаунте Google Диска пользователя, размер которой ограничен 25 МБ на приложение. Сохранённые данные не учитываются в личной квоте пользователя на Google Диске. Сохраняется только самая последняя резервная копия. При создании резервной копии все предыдущие резервные копии удаляются. Данные резервной копии не могут быть прочитаны пользователем или другими приложениями на устройстве.

Список приложений, резервные копии которых были созданы, доступен в приложении Google Диск для Android. На устройствах Android этот список находится в панели навигации приложения Диск в разделе «Настройки» > «Резервное копирование и сброс» .

Резервные копии каждого device-setup-lifetime хранятся в отдельных наборах данных, как описано в следующих примерах:

  • Если у пользователя два устройства, то резервный набор данных существует для каждого устройства.

  • Если пользователь выполняет сброс настроек устройства до заводских, а затем настраивает его с той же учётной записью, резервная копия сохраняется в новом наборе данных. Устаревшие наборы данных автоматически удаляются после определённого периода бездействия.

Расписание резервного копирования

Резервное копирование происходит автоматически при соблюдении всех следующих условий:

  • Пользователь включил резервное копирование на устройстве. В Android 9 эта настройка находится в разделе «Настройки» > «Система» > «Резервное копирование» .
  • С момента последнего резервного копирования прошло не менее 24 часов.
  • Устройство находится в режиме ожидания.
  • Устройство подключено к сети Wi-Fi (если пользователь устройства не включил резервное копирование мобильных данных).

На практике такие ситуации возникают примерно каждую ночь, но устройство может вообще не создавать резервные копии (например, если оно вообще не подключается к сети). Для экономии пропускной способности сети загрузка выполняется только в случае изменения данных приложения.

Во время автоматического резервного копирования система завершает работу приложения, чтобы убедиться, что оно больше не записывает данные в файловую систему. По умолчанию система резервного копирования игнорирует приложения, работающие в фоновом режиме, чтобы избежать неудобств для пользователя. Вы можете переопределить это поведение по умолчанию, установив атрибут android:backupInForeground в значение true.

Для упрощения тестирования в Android предусмотрены инструменты, позволяющие вручную инициировать резервное копирование приложения. Подробнее см. в разделе Тестирование резервного копирования и восстановления .

Восстановить расписание

Данные восстанавливаются при каждой установке приложения, будь то из Play Маркета, во время настройки устройства (когда система устанавливает ранее установленные приложения) или при запуске adb install. Восстановление происходит после установки APK-файла, но до того, как приложение станет доступно для запуска пользователем.

В мастере первоначальной настройки устройства пользователю отображается список доступных резервных копий данных и предлагается выбрать, из какого набора данных восстанавливать данные. Выбранный резервный набор данных становится наследственным набором данных для устройства. Устройство может восстановить данные как из собственных резервных копий, так и из наследственного набора данных. Если доступны резервные копии из обоих источников, устройство отдаёт приоритет своей резервной копии. Если пользователь не выполнил мастер настройки устройства, устройство может восстановить данные только из собственных резервных копий.

Для упрощения тестирования в Android предусмотрены инструменты, позволяющие вручную инициировать восстановление приложения. Подробнее см. в разделе Тестирование резервного копирования и восстановления .

Включить и отключить резервное копирование

Приложения, предназначенные для Android 6.0 (уровень API 23) или выше, автоматически участвуют в функции автоматического резервного копирования. В файле манифеста приложения задайте логическое значение android:allowBackup , чтобы включить или отключить резервное копирование. Значение по умолчанию — true , но мы рекомендуем явно задать этот атрибут в манифесте, как показано в следующем примере:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

Вы можете отключить резервное копирование, установив для параметра android:allowBackup значение false . Это может пригодиться, если ваше приложение может восстанавливать своё состояние с помощью какого-либо другого механизма или если оно работает с конфиденциальной информацией.

Включать и исключать файлы

По умолчанию система создает резервные копии практически всех данных приложений. Подробнее см. в разделе о файлах, подлежащих резервному копированию .

Вы можете управлять данными, включаемыми в резервную копию, в зависимости от типа передачи. Auto Backup поддерживает резервное копирование в облако на Google Диск и прямую передачу данных с устройства на устройство (D2D). Методы настройки различаются в зависимости от версии Android и targetSdkVersion вашего приложения.

Управление резервным копированием на Android 11 и ниже

Следуйте инструкциям в этом разделе, чтобы контролировать, какие файлы подлежат резервному копированию на устройствах под управлением Android 11 (уровень API 30) или ниже.

  1. В файле AndroidManifest.xml добавьте атрибут android:fullBackupContent к элементу <application> , как показано в следующем примере. Этот атрибут указывает на XML-файл, содержащий правила резервного копирования.

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. Создайте XML-файл с именем @xml/ backup_rules в каталоге res/xml/ . Добавьте в этот файл правила с элементами <include> и <exclude> . В следующем примере выполняется резервное копирование всех общих настроек, кроме device.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
     <include domain="sharedpref" path="."/>
     <exclude domain="sharedpref" path="device.xml"/>
    </full-backup-content>

Определить условия устройства, необходимые для резервного копирования

Если ваше приложение сохраняет конфиденциальную информацию на устройстве, вы можете указать условия, при которых данные вашего приложения будут включены в резервную копию пользователя. В Android 9 (уровень API 28) и выше можно добавить следующие условия:

Если вы обновили свои устройства для разработки до Android 9, вам необходимо отключить и снова включить резервное копирование данных после обновления. Это связано с тем, что Android шифрует резервные копии только с помощью клиентского секретного ключа, уведомив пользователя об этом в настройках или мастере настройки.

Чтобы объявить условия включения, задайте атрибуту requireFlags выбранное значение или значения в элементах <include> в вашем наборе правил резервного копирования:

backup_rules.xml

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <!-- App data isn't included in user's backup
         unless client-side encryption is enabled. -->
    <include domain="file" path="."
             requireFlags="clientSideEncryption" />
</full-backup-content>

Если ваше приложение реализует систему резервного копирования на основе ключей или вы самостоятельно реализуете BackupAgent , вы также можете применить эти условные требования к своей логике резервного копирования, выполнив побитовое сравнение между набором флагов транспорта объекта BackupDataOutput и флагами FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED или FLAG_DEVICE_TO_DEVICE_TRANSFER вашего пользовательского агента резервного копирования.

Следующий фрагмент кода показывает пример использования этого метода:

Котлин

class CustomBackupAgent : BackupAgent() {
    override fun onBackup(oldState: ParcelFileDescriptor?,
            data: BackupDataOutput?, newState: ParcelFileDescriptor?) {
        if (data != null) {
            if ((data.transportFlags and
                    FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) {
                // Client-side backup encryption is enabled.
            }

            if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) {
                // Local device-to-device transfer is enabled.
            }
        }
    }

    // Implementation of onRestore() here.
}

Ява

public class CustomBackupAgent extends BackupAgent {
    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
            ParcelFileDescriptor newState) throws IOException {
        if ((data.getTransportFlags() &
                FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) {
            // Client-side backup encryption is enabled.
        }

        if ((data.getTransportFlags() &
                FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) {
            // Local device-to-device transfer is enabled.
        }
    }

    // Implementation of onRestore() here.
}

Управление резервным копированием на Android 12 и выше

Если ваше приложение предназначено для Android 12 (уровень API 31) или выше, следуйте инструкциям в этом разделе, чтобы контролировать, какие файлы подлежат резервному копированию на устройствах под управлением Android 12 или выше.

  1. В файле AndroidManifest.xml добавьте атрибут android:dataExtractionRules к элементу <application> , как показано в следующем примере. Этот атрибут указывает на XML-файл, содержащий правила резервного копирования.

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. Создайте XML-файл с именем backup_rules .xml в каталоге res/xml/ . Добавьте в этот файл правила с элементами <include> и <exclude> . В следующем примере выполняется резервное копирование всех общих настроек, кроме device.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <data-extraction-rules>
     <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
       <include domain="sharedpref" path="."/>
       <exclude domain="sharedpref" path="device.xml"/>
     </cloud-backup>
    </data-extraction-rules>

Синтаксис конфигурации XML

Синтаксис XML для файла конфигурации различается в зависимости от версии Android, на которой работает ваше приложение.

Android 11 или ниже

Используйте следующий синтаксис XML для файла конфигурации, который управляет резервным копированием для устройств под управлением Android 11 или ниже .

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string" />
</full-backup-content>

Android 12 или выше

Если ваше приложение предназначено для Android 12 (уровень API 31) или выше, используйте следующий синтаксис XML для файла конфигурации, который управляет резервным копированием для устройств под управлением Android 12 или выше .

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
  </device-transfer>
  <cross-platform-transfer platform="ios">
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root" | "device_file" | "device_database" |
                     "device_sharedpref" | "device_root" ] path="string"/>
    ...
    <platform-specific-params bundleId="string" teamId="string" contentVersion="string"/>
    ...
  </cross-platform-transfer>
</data-extraction-rules>

Каждый раздел конфигурации ( <cloud-backup> , <device-transfer> , <cross-platform-transfer> ) содержит правила, применяемые только к данному типу передачи. Такое разделение позволяет, например, исключить файл или каталог из резервных копий Google Диска, не прерывая их передачу при передаче с устройства на устройство (D2D) или кроссплатформенной передаче. Это полезно, если у вас есть файлы, которые слишком велики для резервного копирования в облако, но могут быть без проблем перенесены между устройствами.

Если для определенного режима резервного копирования нет правил, например, если отсутствует раздел <device-transfer> , этот режим полностью включен для всего содержимого, за исключением каталогов no-backup и cache , как описано в разделе «Файлы, для которых выполняется резервное копирование» .

Ваше приложение может установить флаг disableIfNoEncryptionCapabilities в разделе <cloud-backup> , чтобы резервное копирование выполнялось только при наличии шифрования, например, когда у пользователя заблокирован экран. Установка этого ограничения предотвращает отправку резервных копий в облако, если устройство пользователя не поддерживает шифрование. Однако, поскольку D2D-передачи не отправляются на сервер, они продолжают выполняться даже на устройствах, которые не поддерживают шифрование.

Синтаксис для включения и исключения элементов

Внутри тегов <full-backup-content> , <cloud-backup> и <device-transfer> (в зависимости от версии Android устройства и targetSDKVersion вашего приложения) вы можете определить элементы <include> и <exclude> :

<include>

Указывает файл или папку для резервного копирования. По умолчанию функция автоматического резервного копирования включает почти все файлы приложения. Если указать элемент <include> , система перестанет включать файлы по умолчанию и будет создавать резервные копии только указанных файлов . Чтобы включить несколько файлов, используйте несколько элементов <include> .

В Android 11 и ниже этот элемент также может содержать атрибут requireFlags , который более подробно обсуждается в разделе, описывающем определение условных требований для резервного копирования .

Файлы в каталогах, возвращаемых getCacheDir() , getCodeCacheDir() или getNoBackupFilesDir() , всегда исключаются, даже если вы пытаетесь их включить.

<exclude>

Указывает файл или папку, которые следует исключить из резервного копирования. Вот некоторые файлы, которые обычно исключаются из резервного копирования:

  • Файлы с идентификаторами, специфичными для устройства, выданными сервером или сгенерированными на самом устройстве. Например, Firebase Cloud Messaging (FCM) необходимо генерировать регистрационный токен каждый раз, когда пользователь устанавливает ваше приложение на новое устройство. При восстановлении старого регистрационного токена приложение может вести себя непредсказуемо.

  • Файлы, связанные с отладкой приложения.

  • Большие файлы, из-за которых приложение превышает квоту резервного копирования в 25 МБ.

Каждый элемент <include> и <exclude> должен включать следующие два атрибута:

domain

Указывает местоположение ресурса. Допустимые значения этого атрибута:

  • root : каталог в файловой системе, в котором хранятся все личные файлы, принадлежащие этому приложению.
  • file : каталоги, возвращаемые getFilesDir() .
  • database : каталоги, возвращаемые функцией getDatabasePath() . Здесь хранятся базы данных, созданные с помощью SQLiteOpenHelper .
  • sharedpref : каталог, в котором хранятся SharedPreferences .
  • external : каталог, возвращаемый getExternalFilesDir() .
  • device_root : как root , но для защищенного устройства хранения.
  • device_file : как file , но для защищенного устройства хранения.
  • device_database : как database , но для хранилища, защищенного устройством.
  • device_sharedpref : как sharedpref , но для хранилища, защищенного устройством.
path

Указывает файл или папку для включения в резервную копию или исключения из неё. Обратите внимание на следующее:

  • Этот атрибут не поддерживает синтаксис подстановочных знаков и регулярных выражений.
  • Вы можете ссылаться на текущий каталог, используя ./ , но вы не можете ссылаться на родительский каталог, например, используя .. , из соображений безопасности.
  • Если указать каталог, то правило применяется ко всем файлам в этом каталоге и рекурсивных подкаталогах.

Настройка кроссплатформенных передач

Начиная с Android 16 QPR2 (уровень API 36.1), вы можете настроить автоматическое резервное копирование для передачи данных на устройства, отличные от Android, и обратно. Для этого добавьте элемент <cross-platform-transfer> в конфигурацию <data-extraction-rules> , как показано в синтаксисе Android 12 и более поздних версий . Необходимо указать целевую платформу с помощью обязательного атрибута platform . Поддерживается только значение ios .

Внутри этого раздела вы можете использовать стандартные элементы <include> и <exclude> , как описано в разделе Синтаксис элементов include и exclude, чтобы указать, какие данные следует передавать.

Кроме того, необходимо включить элемент <platform-specific-params> , чтобы система могла сопоставить ваше приложение с соответствующим приложением на целевой платформе. Этот элемент имеет следующие обязательные атрибуты:

  • bundleId : идентификатор пакета приложения на другой платформе (например, идентификатор пакета вашего приложения iOS).
  • teamId : идентификатор команды приложения на другой платформе (например, идентификатор команды вашего приложения iOS).
  • contentVersion : определяемая вами строка версии, связанная с форматом экспортируемых данных.

Атрибуты bundleId и teamId используются для проверки целостности данных и корректного сопоставления приложений. Они гарантируют, что данные будут переданы только в указанное приложение на другой платформе при экспорте, и что данное приложение Android импортирует данные только из этого приложения при импорте.

Для более точного контроля над процессом преобразования и передачи данных, выходящего за рамки правил XML, можно реализовать пользовательский BackupAgent и использовать API кросс-платформенной передачи .

Сопоставление файлов для передачи данных iOS

При переносе файлов на iOS domain Android и path указанные в правилах <include> , сопоставляются с определённой структурой каталогов. В следующей таблице показаны пути назначения на iOS относительно корневого каталога назначения передачи на основе domain Android:

Android- domain Путь на iOS (относительно переноса корня)
root app/
file app/files/
database app/databases/
sharedpref app/shared_prefs/
external external/files/
device_root device/app/
device_file device/app/files/
device_database device/app/databases/
device_sharedpref device/app/shared_prefs/

Например, файл, включенный в <include domain="file" path="my_settings.txt"/> будет доступен на стороне iOS по адресу app/files/my_settings.txt относительно корня назначения передачи.

Реализовать BackupAgent

Приложениям, реализующим функцию автоматического резервного копирования, не требуется реализовывать BackupAgent . Однако вы можете реализовать собственный BackupAgent . Обычно это делается по двум причинам:

  • Вы хотите получать уведомления о событиях резервного копирования, таких как onRestoreFinished() и onQuotaExceeded() . Эти методы обратного вызова выполняются, даже если приложение не запущено.

  • Набор файлов, резервная копия которых требуется создать, сложно выразить с помощью XML-правил. В таких редких случаях можно реализовать BackupAgent , который переопределяет onFullBackup(FullBackupDataOutput) для сохранения необходимых данных. Чтобы сохранить системную реализацию по умолчанию, вызовите соответствующий метод суперкласса с помощью super.onFullBackup() .

Если вы реализуете BackupAgent , система по умолчанию ожидает, что ваше приложение будет выполнять резервное копирование и восстановление данных по ключам и значениям . Чтобы использовать автоматическое резервное копирование на основе файлов, установите для атрибута android:fullBackupOnly значение true в манифесте приложения.

Во время автоматического резервного копирования и восстановления система запускает приложение в ограниченном режиме, чтобы предотвратить доступ приложения к файлам, которые могут вызвать конфликты, и позволить приложению выполнять методы обратного вызова в его BackupAgent . В этом ограниченном режиме основная активность приложения не запускается автоматически, его поставщики контента не инициализируются, а вместо любого подкласса, объявленного в манифесте приложения, создается экземпляр базового класса Application .

Ваш BackupAgent должен реализовывать абстрактные методы onBackup() и onRestore() , используемые для резервного копирования пар «ключ-значение». Если вы не хотите выполнять резервное копирование пар «ключ-значение», оставьте реализацию этих методов пустой.

Для получения дополнительной информации см. раздел Расширение BackupAgent .

Обработка кроссплатформенных передач в BackupAgent

Начиная с Android 16 QPR2 (уровень API 36.1), в BackupAgent доступно несколько новых API для лучшей поддержки кроссплатформенной передачи данных.

Новый транспортный флаг:

  • FLAG_CROSS_PLATFORM_TRANSFER_IOS : этот флаг добавляется к transportFlags , предоставленным вашему BackupAgent .
    • В onFullBackup этот флаг устанавливается, если текущая операция резервного копирования является частью экспорта данных на устройство iOS.
    • В новой перегрузке onRestoreFile этот флаг устанавливается, если данные импортируются с устройства iOS.

Новый метод onRestoreFile :

Представлена ​​новая перегрузка метода onRestoreFile , принимающая один параметр FullRestoreDataInput . Этот объект предоставляет более подробную информацию об операции восстановления:

  • FullRestoreDataInput.getTransportFlags() : возвращает флаги транспорта для текущей операции восстановления, которые могут включать FLAG_CROSS_PLATFORM_TRANSFER_IOS .
  • FullRestoreDataInput.getContentVersion() : возвращает строку версии контента, предоставленную исходным приложением на другой платформе при кроссплатформенной передаче. Это значение представляет собой пустую строку, если оно не предоставлено источником.

Новый метод оценки размера:

  • onEstimateFullBackupBytes() : Этот метод позволяет указать предполагаемый размер данных, которые ваше приложение планирует создать в резервной копии. Реализация этого метода настоятельно рекомендуется, если ваше приложение выполняет значительные преобразования данных во время резервного копирования или обрабатывает большие объёмы данных, поскольку это может повысить эффективность, избегая стандартного системного «холостого прогона». Для приложений с небольшими и простыми резервными копиями этот метод обычно не нужен.

Пример использования:

Котлин

// In your custom BackupAgent class

override fun onFullBackup(out: FullBackupDataOutput) {
    // Check if this is a cross-platform export to iOS
    if ((out.transportFlags and FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
        Log.d(TAG, "onFullBackup for iOS transfer")
        // Your custom export logic here
        // Call fullBackupFile() for files to include
    }
}

override fun onRestoreFile(input: FullRestoreDataInput) {
    if ((input.transportFlags and FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
        val sourceContentVersion = input.contentVersion
        Log.d(TAG, "onRestoreFile from iOS, content version: $sourceContentVersion")
        // Your custom import logic here, using input.data, input.destination, etc.
    }
}

// Optional: Provide an estimate of the backup size
override fun onEstimateFullBackupBytes(): Long {
    return calculateEstimatedBackupSize()
}

Ява

// In your custom BackupAgent class

@Override
public void onFullBackup(FullBackupDataOutput out) throws IOException {
    // Check if this is a cross-platform export to iOS
    if ((out.getTransportFlags() & FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
        Log.d(TAG, "onFullBackup for iOS transfer");
        // Your custom export logic here
        // Call fullBackupFile() for files to include
    }
}

@Override
public void onRestoreFile(FullRestoreDataInput input) {
    if ((input.getTransportFlags() & FLAG_CROSS_PLATFORM_TRANSFER_IOS) != 0) {
        String sourceContentVersion = input.getContentVersion();
        Log.d(TAG, "onRestoreFile from iOS, content version: " + sourceContentVersion);
        // Your custom import logic here, using input.getData(), input.getDestination(), etc.
    }
}

// Optional: Provide an estimate of the backup size
@Override
public long onEstimateFullBackupBytes() {
    return calculateEstimatedBackupSize();
}