page.title=Backup automático para aplicativos page.tags=backup, previewresources, androidm page.keywords=backup, autobackup, preview page.image=images/cards/card-auto-backup_2x.png @jd:body
Frenquentemente, os usuários investem muito tempo e esforço para criar dados e configurar preferências nos aplicativos. Preservar esses dados para os usuários caso substituam um dispositivo quebrado ou atualizem-se para um novo é importante para garantir uma ótima experiência de usuário. Dispositivos que executam o sistema Android M Preview ajudam a garantir uma boa experiência para os usuários nessas circunstâncias realizando o backup dos dados do aplicativo automaticamente no Google Drive. Os dados do aplicativo são restaurados automaticamente se um usuário alterar ou atualizar um dispositivo.
Os backups automáticos estão ativos para todos os aplicativos instalados nos dispositivos que executam o Android M Preview. Nenhum código adicional de aplicativo é necessário. O sistema fornece aos usuários a habilidade de decisão sobre os backups automáticos de dados. Também é possível limitar quais dados do aplicativo devem ter o backup.
Este documento descreve o novo comportamento do sistema e como especificar quais dados terão backup para o aplicativo.
O recurso de backup automático preserva os dados que o aplicativo cria em um dispositivo de usuário enviando-os à conta do Google Drive do usuário e criptografando-os. Não há cobranças para você ou para o usuário em relação ao armazenamento de dados e os dados salvos não contam para a cota do Drive pessoal do usuário. Durante o período do M Preview, os usuários podem armazenar até 25 MB por aplicativo do Android.
Os backups automáticos ocorrem a cada 24 horas, quando o dispositivo está ocioso, carregando e conectado a uma rede Wi-Fi. Quando esses requisitos são atendidos, o serviço Backup Manager envia todos os dados de backup disponíveis à nuvem. Quando um usuário transita para um novo dispositivo, ou desinstala e reinstala o aplicativo com backup realizado, uma operação de restauração copia os dados de backup para o diretório de dados do aplicativo recém-instalado.
Observação: se o usuário usar o serviço de Backup do Android de legado, este novo comportamento não se aplicará aos trabalhos de comportamento de backup existentes com o normal.
Nem todos os dados do aplicativo devem ter backup, como arquivos temporários e de armazenamento em cachê. Portanto, o serviço de backup automático exclui determinados arquivos de dados por padrão:
Os dados criados por qualquer aplicativo instalado em um dispositivo M Preview têm backup, exceto os arquivos excluídos automaticamente listados na seção anterior. É possível limitar e configurar quais dados terão backup no seu aplicativo usando as configurações no manifesto do aplicativo.
Dependendo de quais dados o aplicativo precisar e do modo que forem salvos, você precisará definir regras específicas para incluir ou excluir determinados arquivos ou diretórios. O serviço de backup automático suporta a configuração dessas regras de backup por meio do uso de um arquivo de configuração XML e do manifesto do aplicativo. No manifesto do aplicativo, é possível especificar o arquivo de configuração de esquema de backup como exibido no seguinte exemplo:
<?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 ... android:fullBackupContent="@xml/mybackupscheme"> </app> ... </manifest>
Neste código de exemplo, o atributo android:fullBackupContent
especifica um arquivo XML,
localizado no diretório res/xml/
do projeto de desenvolvimento do aplicativo, chamado
mybackupscheme.xml
. Este arquivo de configuração inclui as regras de quais arquivos terão
backup. O seguinte código de exemplo mostra um arquivo de configuração que exclui um arquivo específico
dos backups:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <exclude domain="database" path="device_info.db"/> </full-backup-content>
Esta configuração de backup de exemplo exclui do backup somente um arquivo específico do banco de dados. Todos os outros arquivos terão backup.
A configuração do serviço de backup permite que você especifique quais arquivos incluir ou excluir do backup. A sintaxe para o arquivo XML de configuração de backup de dados é a seguinte:
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> </full-backup-content>
Os seguintes elementos e atributos permitem que você especifique os arquivos que serão incluídos ou excluídos do backup:
<include>
. Use este elemento se quiser especificar um conjunto de recursos
para o backup, em vez de fazer o sistema realizar o backup de todos os dados no aplicativo por padrão. Ao especificar
uma tag <include>
, o sistema realiza apenas o backup dos recursos especificados
com este elemento.
<exclude>
. Use este elemento para especificar um conjunto de recursos que será excluído
do backup. O sistema realiza o backup de todos os dados no aplicativo, exceto os recursos especificados
com este elemento.
domain.
O tipo de recurso que deseja excluir ou incluir no backup. Os valores válidos
que podem ser especificados para este atributo incluem:
root
. Especifica que o recurso está no diretório raiz do aplicativo.
file
. Corresponde ao recurso no diretório retornado
pelo método {@link android.content.Context#getFilesDir getFilesDir()}.
database
. Corresponde ao banco de dados retornado
pelo método {@link android.content.Context#getDatabasePath getDatabasePath()} ou usando
a classe {@link android.database.sqlite.SQLiteOpenHelper}.
sharedpref
. Corresponde a um objeto {@link android.content.SharedPreferences}
retornado pelo método {@link android.content.Context#getSharedPreferences getSharedPreferences()}
.
external
. Especifica que o recurso está no armazenamento externo e corresponde
a um arquivo no diretório retornado pelo método
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}.
path
. O caminho de arquivo para um recurso que deseja excluir ou incluir
no backup.
É possível optar por evitar backups automáticos de quaisquer dados do aplicativo configurando
o atributo android:allowBackup
para false
no elemento do aplicativo
do manifesto. Esta configuração é ilustrada no seguinte código de exemplo:
<?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 ... android:allowBackup="false"> </app> ... </manifest>
Ao criar uma configuração de backup, deve-se testá-la para garantir que o aplicativo salva os dados e que eles podem ser restaurados corretamente.
Para ajudar a determinar como o recurso de backup analisa o arquivo XML, ative o registro antes de realizar um backup de teste:
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
Para executar um backup manualmente, primeiro deve-se inicializar o Backup Manager chamando o seguinte comando:
$ adb shell bmgr run
Em seguida, realiza-se o backup manualmente do aplicativo usando o seguinte comando, especificando o nome
do pacote para o aplicativo como o parâmetro <PACKAGE>
:
$ adb shell bmgr fullbackup <PACKAGE>
Para iniciar manualmente uma restauração após o backup dos dados do aplicativo, chame o seguinte comando,
especificando o nome do pacote para o aplicativo como o parâmetro <PACKAGE>
:
$ adb shell bmgr restore <PACKAGE>
Aviso: esta ação impede o aplicativo de apagar os dados antes de realizar a operação de restauração.
Para iniciar o processo de restauração do aplicativo, deve-se desinstalar e reinstalá-lo. Os dados do aplicativo são restaurados automaticamente a partir da nuvem quando a instalação do aplicativo for concluída.
Caso ocorra problemas, é possível apagar os dados de backup e os metadados associados desativando o backup e reativando-o em Settings (Configurações) > Backup, redefinindo o dispositivo para as especificações de fábrica, ou chamando este comando:
$ adb shell bmgr wipe <TRANSPORT> <PACKAGE>
O valor <TRANSPORT>
deve ser prefixado por com.google.android.gms
.
Para obter uma lista de transportes, chame o seguinte comando:
$ adb shell bmgr list transports
A seguir estão os problemas conhecidos com o serviço de backup automático: