O que é "android: allowBackup"?

267

Desde a nova versão de visualização do ADT (versão 21) , eles têm um novo aviso de fiapo que informa a próxima coisa no arquivo de manifesto (na tag do aplicativo):

Deve definir explicitamente android: allowBackup como true ou false (é verdade por padrão e pode ter algumas implicações de segurança nos dados do aplicativo)

No site oficial , eles escreveram:

Algumas novas verificações: você deve decidir explicitamente se o aplicativo permite backups e uma verificação de etiqueta. Há um novo sinalizador de linha de comando para definir o caminho da biblioteca. Muitas melhorias na análise incremental do cotão durante a edição.

O que é esse aviso? Qual é o recurso de backup e como eu o uso?

Além disso, por que o aviso me diz que tem implicações de segurança? Quais são as desvantagens e vantagens de desativar esse recurso?


Existem dois conceitos de backup para o manifesto:

  • "android: allowBackup " permite fazer backup e restaurar via adb, como mostrado aqui :

Se o aplicativo deve participar da infraestrutura de backup e restauração. Se esse atributo estiver definido como falso, nenhum backup ou restauração do aplicativo será executado, mesmo por um backup de sistema completo que, de outra forma, faria com que todos os dados do aplicativo fossem salvos via adb. O valor padrão deste atributo é verdadeiro.

Isso é considerado um problema de segurança porque as pessoas podem fazer backup do seu aplicativo via ADB e, em seguida, obter dados privados do seu aplicativo no PC.

No entanto, acho que não é um problema, já que a maioria dos usuários não sabe o que é adb e, se o fizerem, também saberão como fazer root no dispositivo. As funções do ADB funcionariam apenas se o dispositivo tiver o recurso de depuração ativado, e isso precisa que o usuário o habilite.

Portanto, apenas os usuários que conectam seus dispositivos ao PC e ativam o recurso de depuração serão afetados. Se eles tiverem um aplicativo mal-intencionado no PC que usa as ferramentas do ADB, isso pode ser problemático, pois o aplicativo pode ler os dados de armazenamento privado.

Eu acho que o Google deve apenas adicionar um recurso que está desativado por padrão, na categoria desenvolvedor, para permitir o backup e a restauração de aplicativos via ADB.

  • "android: backupAgent " permite usar o recurso de backup e restauração da nuvem, como mostrado aqui e aqui :

O nome da classe que implementa é o agente de backup do aplicativo, uma subclasse de BackupAgent. O valor do atributo deve ser um nome de classe totalmente qualificado (como "com.example.project.MyBackupAgent"). No entanto, como atalho, se o primeiro caractere do nome for um ponto (por exemplo, ".MyBackupAgent"), ele será anexado ao nome do pacote especificado no elemento. Não há padrão. O nome deve ser especificado.

Este não é um problema de segurança.

desenvolvedor android
fonte
Eu acho que você deve remover essa informação adicional em sua Editar, porque essa é referente ao serviço de nuvem de backup, em vez da ferramenta de backup ADB que esta questão é realmente referência (de acordo com a resposta de Tor Norbye)
Tony Chan
@ Turbo sim, você está correto. Eu acho que não foi atualizado muito quando eu li, mas agora está claro. Eu atualizarei a pergunta. obrigado. Gostaria de saber se o recurso de backup adb pode ser usado em dispositivos enraizados, mesmo para aplicativos que o definiram como falso.
desenvolvedor android
2
@IgorGanapolsky, então estou totalmente confuso agora. por que eles mencionaram isso em dois recursos totalmente diferentes? é possível que a mesma bandeira seja responsável por ambos os recursos? ou talvez seja um erro? você acha que eu deveria desmarcar a resposta que marquei?
desenvolvedor android
1
@androiddeveloper A razão pela qual o mesmo atributo exato existe nos dois recursos é provavelmente porque se destina ao mesmo objetivo final: fazer backup de dados. Seja no dispositivo ou na nuvem ...
IgorGanapolsky 25/09
3
Como usuário do Android, eu gostaria de considerar quem encontrar isso e dizer que não suporto aplicativos - e há muitos - que desabilitam o backup. Se uma pessoa tiver acesso a um telefone desbloqueado, ela poderá copiar dados dele. Qualquer medida de "segurança" nesse momento não tem sentido, pois eles sempre podem fazer o root no telefone para obter os dados. Mas como usuário, poder fazer backup dos dados do meu aplicativo (sem fazer root e tropeçar no meu bit Knox) ​​é extremamente valioso. É realmente frustrante que tantos aplicativos não o permitam e, honestamente, o Android ainda tem essa opção.
Nathan estiramento

Respostas:

139

Para este aviso de fiapos, como para todos os outros avisos de fiapos, observe que você pode obter uma explicação mais completa do que apenas o que está na mensagem de erro de uma linha; você não precisa pesquisar na web para obter mais informações.

Se você estiver usando o lint através do Eclipse, abra a visualização de avisos do lint, onde é possível selecionar o erro do lint e ver uma explicação mais longa, ou invocar a correção rápida (Ctrl-1) na linha de erro, e uma das sugestões é " Explique este problema ", que também apresentará uma explicação mais completa. Se você não estiver usando o Eclipse, poderá gerar um relatório HTML a partir de lint ( lint --html <filename>), que inclui explicações completas ao lado dos avisos, ou pode pedir ao lint para explicar um problema específico. Por exemplo, o problema relacionado a allowBackuptem o ID AllowBackup(mostrado no final da mensagem de erro), portanto, a explicação mais completa é:

$ ./lint --show AllowBackup
AllowBackup
-----------
Summary: Ensure that allowBackup is explicitly set in the application's
manifest

Priority: 3 / 10
Severity: Warning
Category: Security

O allowBackupatributo determina se os dados de um aplicativo podem ser copiados e restaurados, conforme documentado aqui .

Por padrão, esse sinalizador está definido como true. Quando esse sinalizador é definido como true, os dados do aplicativo podem ser copiados e restaurados pelo usuário usando adb backupe adb restore.

Isso pode ter consequências de segurança para um aplicativo. adb backuppermite que os usuários que ativaram a depuração USB copiem os dados do aplicativo do dispositivo. Após o backup, todos os dados do aplicativo podem ser lidos pelo usuário. adb restorepermite a criação de dados do aplicativo a partir de uma fonte especificada pelo usuário. Após uma restauração, os aplicativos não devem assumir que os dados, permissões de arquivo e permissões de diretório foram criados pelo próprio aplicativo.

A configuração allowBackup="false"desativa um aplicativo do backup e da restauração.

Para corrigir esse aviso, decida se seu aplicativo deve suportar backup e definir explicitamente android:allowBackup=(true|false)

Clique aqui para obter mais informações

Tor Norbye
fonte
35
os usuários geralmente nem sabem o que é adb e, se sabem, provavelmente sabem como fazer root no dispositivo e obter os dados sozinhos, não é?
developer android
1
@ Tor Quando você diz "copiar dados do aplicativo do dispositivo", você quer dizer copiar de dados / dados / com.myapp ou de sdcard? O diretório anterior está protegido e não pode ser lido, a menos que o dispositivo esteja enraizado.
IgorGanapolsky
2
Portanto, para esclarecer esse backup que o Lint está fazendo referência, é a ferramenta ADB, e não o serviço de backup em nuvem, correto? Parece que muitas das outras respostas estão ficando confusas.
Tony Chan
1
@IgorGanapolsky, acho que o uso do ADB copiará os dados privados, e é por isso que existe um aviso. Eu acho que apenas as pessoas que têm o recurso de depuração ativado e conectam seus dispositivos ao PC são afetadas. essas pessoas geralmente são usuários avançados ou desenvolvedores, portanto devem saber o que estão fazendo. o risco de segurança é para pessoas que fizeram isso por engano e instalaram um aplicativo mal-intencionado no PC que usa a ferramenta ADB para realizar essas operações. existe um aplicativo para backup e restauração sem raiz, chamado "Helium": play.google.com/store/apps/…
desenvolvedor android
"Se você estiver usando o lint via Eclipse ..", provavelmente deverá migrar para o AndroidStudio, pois o plug-in ADT foi descontinuado.
throws_exceptions_at_you
26

Aqui está o que o backup nesse sentido realmente significa:

O serviço de backup do Android permite copiar os dados persistentes do aplicativo para o armazenamento remoto em "nuvem", a fim de fornecer um ponto de restauração para os dados e as configurações do aplicativo. Se um usuário executar uma redefinição de fábrica ou converter para um novo dispositivo com Android, o sistema restaurará automaticamente seus dados de backup quando o aplicativo for reinstalado. Dessa forma, seus usuários não precisam reproduzir seus dados ou configurações de aplicativos anteriores.

~ Extraído de http://developer.android.com/guide/topics/data/backup.html

Você pode se registrar neste serviço de backup como desenvolvedor aqui: https://developer.android.com/google/backup/signup.html

Os tipos de dados que podem ser armazenados em backup são arquivos, bancos de dados, preferências compartilhadas, cache e lib. Geralmente, eles são armazenados no diretório /data/data/[com.myapp] do seu dispositivo, que é protegido contra leitura e não pode ser acessado, a menos que você tenha privilégios de root.

UPDATE : Você pode ver este sinalizador listado na API do BackupManager : BackupManager

IgorGanapolsky
fonte
4
Penso que as alterações no nível da API 23 apontam que esta é a resposta correta. Aqui está a documentação de treinamento para as alterações: developer.android.com/training/backup/autosyncapi.html
pumpkinpie65
8

Isso não é mencionado explicitamente, mas com base nos seguintes documentos, acho que está implícito que um aplicativo precisa declarar e implementar um BackupAgent para que o backup de dados funcione, mesmo no caso em que allowBackup esteja definido como true (que é o valor padrão).

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android. com / guide / topics / data / backup.html

Yuntao
fonte
e se o aplicativo não tiver nada relacionado ao backupAgent? no entanto, o Android fará backup dos seus dados automaticamente?
desenvolvedor Android
1
a resposta correta é encontrada aqui: stackoverflow.com/a/13806946/878126 . parece que não tem nada a ver com o backupAgent. Também atualizei minha pergunta para mostrar do que se trata.
desenvolvedor android
3

É uma preocupação de privacidade . É recomendável não permitir que os usuários façam backup de um aplicativo se ele contiver dados confidenciais. Tendo acesso aos arquivos de backup (ou seja, quando android:allowBackup="true"), é possível modificar / ler o conteúdo de um aplicativo, mesmo em um dispositivo não-rooteado.

Solução - use android:allowBackup="false"no arquivo de manifesto.

Você pode ler esta postagem para obter mais informações: Hackeando aplicativos Android usando técnicas de backup

Ayaz Alifov
fonte
1
Você está falando sério com esta resposta em 2017? leia-o aqui developer.android.com/guide/topics/data/…
batmaci 10/04
Você pode desativar os backups configurando android: allowBackup como false. Você pode fazer isso se seu aplicativo puder recriar seu estado por meio de outro mecanismo ou se tratar de informações confidenciais que o Android não deve fazer backup.
Edgar Khimich
Atualmente, você pode excluir dados confidenciais dos backups por meio de atributos no manifesto.
Yousha Aleayoub