Um aplicativo Android lembra seus dados após desinstalar e reinstalar

191

Durante o desenvolvimento de um aplicativo Android destinado a todas as versões acima da 4.1, observei que desinstalar e instalar o aplicativo novamente não limpa seus dados.

O aplicativo foi projetado para armazenar os detalhes solicitados em sua primeira tela. Após desinstalar e instalar novamente no SO versão 4.4.4, o aplicativo solicita que o usuário preencha os dados, o que é normal. No entanto, na versão 6.0, a mesma sequência de instalação / desinstalação recupera os dados originalmente introduzidos.

Eu tentei garantir, visitando /data/data/my package folderpara ver o banco de dados desapareceu após a desinstalação e, de fato, essa pasta é excluída durante a desinstalação.

Tentei excluir o aplicativo visitando a página de configurações, através do Titanium Backup e os resultados são os mesmos. O dispositivo está enraizado no Nexus 5 executando a v6.0.

Qual poderia ser a razão para esse comportamento estranho?

Narayanan
fonte

Respostas:

322

É porque o Android 6 tem backup automático. Você precisa ajustar android:allowBackupe android:fullBackupContentem sua <application>tag de manifesto se não desejar fazer backup de seus dados ou se desejar incluir ou excluir alguns recursos. Não é um bug.

Mais sobre o AutoBackup no Android aqui .

greywolf82
fonte
27
Esta é a resposta correta e funciona para mim (eu tive o mesmo problema) Para evitar esse comportamento, é necessário colocar android: allowBackup = "false" e android: fullBackupContent = "false" no manifest.xml
frusso
32
Caso alguns de vocês se perguntem, android: allowBackup e android: fullBackupContent são propriedades a serem adicionadas em <application />
Jack
2
Da documentação: android: fullBackupContent aponta para o arquivo XML que contém opções de backup. Por padrão, a maioria dos arquivos é copiada. Embora as configurações para "false" não causem nenhum erro, acho que é errado definir.
bajicdusko
3
Não sei por que eles mantiveram o comportamento padrão para fazer backup, como o comportamento não está sincronizado com as versões anteriores, torna-se irritante. Quem quiser pode ligá-lo.
Atul
7
Alguém sabe como excluir os backups?
1800 INFORMAÇÃO
29

A resposta de greywolf82 está correta, mas quero adicionar algumas informações a isso.

Ao desenvolver meu aplicativo Android (usando o Xamarin), notei que sempre que eu reiniciava o aplicativo a partir do Visual Studio, meus dados voltavam aos dados de alguns meses atrás. Não importava se eu simplesmente parei e o executei novamente do VS, ou se eu desinstalei completamente o aplicativo e o reinstalei.

Também é importante notar que nunca dissemos explicitamente ao aplicativo para armazenar um backup.

O backup também parecia sobrescrever dados mais recentes ao iniciar a partir do Visual Studio, e temos relatórios de usuários usando a versão do nosso aplicativo e também obtendo dados mais novos sobrescritos pelos backups.

Como não sei exatamente quando ocorrem backups e restaurações, esse recurso parece causar apenas problemas.

Modificamos nosso AndroidManifest conforme mostrado no seguinte xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
    <application 
               android:label="@string/appName" 
               android:icon="@drawable/icon_small" 
               android:installLocation="internalOnly" 
               android:largeHeap="true"
               android:allowBackup="false"
               android:fullBackupOnly="false"
               />
...
</manifest>

Uma vez que explicitamente definimos o valor como false, tudo parece funcionar. Eu esperava que esse fosse um recurso de aceitação, mas ... parece que ele pode estar ativado por padrão para aplicativos que não especificam o valor de qualquer maneira.

Victor Chelaru
fonte
Obrigado. Eu tive o mesmo problema.
Hadi Fooladi Talari
15

Você deve verificar as configurações de backup e redefinição do dispositivo e desativar a restauração automática (ao reinstalar um aplicativo, as configurações e os dados de backup serão restaurados.)

Desativar o backup automático é diferente da restauração automática. Se você acha que será útil ativar o backup automático para seu aplicativo, faça isso. Mas se você acha que isso fará com que os usuários finais que não estão cientes de que o recurso de restauração automática do dispositivo esteja ativado, fique à vontade para desativá-lo.

No meu caso, desativei o recurso allowBackup, mas como já tinha um backup da versão anterior na nuvem, ele continuava restaurando.

Veja a imagem como referência para um dispositivo Samsung no Android 6.0. Outros dispositivos e versões podem ter uma tela diferente. Veja a imagem abaixo.

Configuração de restauração automática em Backup e redefinição

Matcieou7th
fonte
Eu tenho o mesmo problema, meu aplicativo tinha feito backup de dados para poucos usuários quando estava ligado. Existe alguma possibilidade de limpar / descartar dados sincronizados?
Aditya Chauhan
5

Recentemente, eu precisei tirar proveito desses recursos, fui capaz de descobrir a documentação e, após testes extensivos, é isso que pude deduzir:

Android: allowbackup - fará backup dos dados do aplicativo local no dispositivo em que está localizado.

Android: fullBackupContent - é usado em conjunto com a API de restauração de backup do Google e PODE ser controlado por um arquivo xml para especificar exatamente o que fazer backup, bem como uma classe BackupManager que você pode implementar para ter mais controle sobre o processo.

No entanto, a documentação declara, e confirmei com o teste, que uma restauração só ocorrerá quando o dispositivo for restaurado e o processo de dados do aplicativo de restauração for acionado. OU também será restaurado quando o aplicativo for carregado de lado pelo adb, que é o que fazemos quando executamos o aplicativo para testar ou depurar nossos dispositivos pelo Android Studio. Observe que, se você definir android: allowbackup, mas não configurar android: fullBackupContent com um código de API do Google, os dados do aplicativo serão armazenados apenas localmente, enquanto que se você o configurou corretamente, se o backup for feito e você obterá um novo dispositivo, os aplicativos os dados foram armazenados na nuvem para que possam ser restaurados em um novo dispositivo.

Xijukx
fonte
3

A adição de android: allowBackup = "false" na tag do aplicativo no arquivo Manifest resolveu meu problema.

Aqui está a documentação do Android para fazer backup de dados do usuário com o Backup automático

Vinay John
fonte
2

Basta alterar android: allowBackup = "true" para android: allowBackup = "false" no manifestiest.xml. Será trabalhado.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="false"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
</manifest>
Nag Kosanam
fonte
2

Além disso, descobrimos que no Android 9 (em um dispositivo HMD Nokia) os ativos eram mantidos, mesmo após a exclusão do aplicativo pela interface e pelo adb.

A resposta da adição:

android:allowBackup="false" android:fullBackupOnly="false"

Obviamente, essa não é uma resposta nova - mas uma observação para pessoas que estavam na mesma posição que nós.

JRK
fonte
2

Se você está direcionando o Android 10, deve inserir a android:hasFragileUserData="true"tag do aplicativoAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android: hasFragileUserData é uma nova configuração de manifesto (suponho). "Se verdadeiro, o usuário é solicitado a manter os dados do aplicativo na desinstalação". Isso parece propício para abuso, mas posso ver onde isso pode ser útil para alguns aplicativos.

Consulte https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

Manohar Reddy
fonte