Una aplicación de Android recuerda sus datos después de desinstalar y reinstalar

194

Mientras desarrollaba una aplicación de Android dirigida a todas las versiones anteriores a 4.1, observé que desinstalar mi aplicación e instalarla nuevamente no borra sus datos.

La aplicación está diseñada para almacenar los detalles que solicita en su primera pantalla. Después de desinstalar e instalar nuevamente en el SO versión 4.4.4, la aplicación solicita al usuario que complete los datos, lo cual es normal. Sin embargo, en la versión 6.0, la misma secuencia de instalación / desinstalación devuelve los datos ingresados ​​originalmente.

Intenté asegurarme visitando /data/data/my package folderpara ver que la base de datos desapareció después de la desinstalación y, de hecho, esa carpeta se elimina durante la desinstalación.

Intenté eliminar la aplicación visitando la página de configuración, a través de Titanium Backup y los resultados son los mismos. El dispositivo está rooteado Nexus 5 con v6.0.

¿Cuál podría ser la razón de este extraño comportamiento?

Narayanan
fuente

Respuestas:

330

Es porque Android 6 tiene copia de seguridad automática. Debe ajustar android:allowBackupy android:fullBackupContenten su <application>etiqueta de manifiesto si no desea hacer una copia de seguridad de sus datos o si desea incluir o excluir algunos recursos. No es un error.

Más información sobre AutoBackup en Android aquí .

greywolf82
fuente
28
Esta es la respuesta correcta y funciona para mí (tuve el mismo problema) Para evitar este comportamiento es necesario poner android: allowBackup = "false" y android: fullBackupContent = "false" en manifest.xml
frusso
33
En caso de que algunos de ustedes se pregunten, android: allowBackup y android: fullBackupContent son propiedades para agregar en <application />
Jack '
2
De la documentación: android: fullBackupContent apunta a un archivo XML que contiene opciones de copia de seguridad. Por defecto, la mayoría de los archivos están respaldados. Aunque configurar esto en "falso" no desencadena ningún error, supongo que es incorrecto configurarlo.
bajicdusko
3
No estoy seguro de por qué mantuvieron el comportamiento predeterminado para hacer una copia de seguridad, ya que el comportamiento no está sincronizado con las versiones anteriores, por lo que se vuelve molesto. Los que lo quieran podrían encenderlo.
Atul
77
¿Alguien sabe cómo eliminar las copias de seguridad?
1800 INFORMACIÓN
31

La respuesta de greywolf82 es correcta, pero quiero agregar algo de información a esto.

Al desarrollar mi aplicación de Android (usando Xamarin), noté que cada vez que reiniciaba la aplicación desde Visual Studio, mis datos volverían a los datos de hace unos meses. No importó si simplemente me detuve y volví a ejecutarlo desde VS, o si desinstalé completamente la aplicación y la reinstalé.

También vale la pena señalar que nunca le dijimos explícitamente a la aplicación que almacenara una copia de seguridad.

La copia de seguridad también parecía sobrescribir los datos más nuevos cuando se iniciaba desde Visual Studio, y tenemos informes de usuarios que utilizan la versión de lanzamiento de nuestra aplicación y también reciben datos más nuevos sobrescritos por las copias de seguridad.

Como no sé exactamente cuándo ocurren las copias de seguridad y las restauraciones, esta característica parece causar solo problemas.

Hemos modificado nuestro AndroidManifest como se muestra en el siguiente 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>

Una vez que establecemos explícitamente el valor en falso, todo parece funcionar. Esperaría que esta sea una función opcional, pero ... parece que podría estar activada de manera predeterminada para aplicaciones que no especifican el valor de ninguna manera.

Victor Chelaru
fuente
Gracias. Tuve el mismo problema.
Hadi Fooladi Talari
15

Debe verificar la configuración de Copia de seguridad y restablecimiento de su dispositivo, y desactivar la Restauración automática (al reinstalar una aplicación, se restaurarán las configuraciones y los datos respaldados).

Desactivar la copia de seguridad automática es diferente de la restauración automática. Si cree que será útil activar la copia de seguridad automática para su aplicación, hágalo. Pero si cree que esto hará que los usuarios finales que no sean conscientes de que la función de restauración automática de su dispositivo esté activada, no duden en desactivarla.

En mi caso, desactivé la función allowBackup, pero como ya tenía una copia de seguridad de la versión anterior en la nube, seguía restaurando.

Vea la imagen como referencia para un dispositivo Samsung en Android 6.0. Otros dispositivos y versiones pueden tener una pantalla diferente. Ver imagen a continuación.

Configuración de restauración automática en Copia de seguridad y restablecimiento

Matcieou7th
fuente
Tengo el mismo problema, mi aplicación había hecho una copia de seguridad de datos para pocos usuarios cuando estaba activa. ¿Existe alguna posibilidad de borrar / descartar datos sincronizados?
Aditya Chauhan
5

Recientemente necesité aprovechar estas características, pude descubrir la documentación y, después de realizar pruebas exhaustivas, esto es lo que he podido deducir:

Android: allowbackup: realizará una copia de seguridad de los datos de la aplicación local en el dispositivo en el que se encuentra.

Android: fullBackupContent: se usa junto con la API de restauración de copias de seguridad de Google y PUEDE controlarse a través de un archivo xml para especificar exactamente qué hacer una copia de seguridad, así como una clase BackupManager que puede implementar para un mayor control sobre el proceso.

Sin embargo, la documentación indica, y he confirmado con las pruebas, que una restauración solo ocurrirá cuando el dispositivo se restaure y se active el proceso de restauración de datos de la aplicación. O también se restaurará cuando la aplicación se descargue a través de adb, que es lo que hacemos cuando ejecutamos la aplicación para probarla o depurarla en nuestros dispositivos a través de Android Studio. Tenga en cuenta que si configura android: allowbackup pero no configura android: fullBackupContent con un código de API de Google, los datos de las aplicaciones solo se almacenan localmente, mientras que si los configuró correctamente, entonces si su aplicación fue respaldada y obtiene un nuevo dispositivo, las aplicaciones los datos se almacenaron en la nube para poder restaurarlos en un nuevo dispositivo.

Xijukx
fuente
3

Agregar Android: allowBackup = "false" bajo la etiqueta de la aplicación en el archivo Manifiesto resolvió mi problema.

Aquí va la documentación de Android para hacer una copia de seguridad de los datos del usuario con Copia de seguridad automática

Vinay John
fuente
2

Simplemente cambie android: allowBackup = "true" a android: allowBackup = "false" en manifiest.xml. Será trabajado

<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
fuente
2

Solo agregando a esto, encontramos que en Android 9 (en un dispositivo HMD Nokia) que los activos se mantuvieron, incluso después de eliminar la aplicación a través de la interfaz y a través de adb.

La respuesta de agregar:

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

Obviamente, esta no es una respuesta nueva, sino una observación para las personas que estaban en la misma posición que nosotros.

JRK
fuente
2

Si está apuntando a Android 10, entonces debe colocar la android:hasFragileUserData="true"etiqueta de aplicación deAndroidManifest.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 es una nueva configuración de manifiesto (supongo). "Si es verdadero, se le solicita al usuario que mantenga los datos de la aplicación al desinstalar". Esto parece propicio para el abuso, pero puedo ver dónde podría ser útil para algunas aplicaciones.

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

Manohar Reddy
fuente