Un'app Android memorizza i suoi dati dopo la disinstallazione e la reinstallazione


194

Durante lo sviluppo di un'app Android destinata a tutte le versioni precedenti alla 4.1, ho osservato che disinstallare la mia app e installarla di nuovo non cancella i suoi dati.

L'app è progettata per memorizzare i dettagli richiesti nella prima schermata. Dopo aver disinstallato e reinstallato la versione 4.4.4 del sistema operativo, l'app richiede all'utente di inserire i dati, il che è normale. Tuttavia, nella versione 6.0 la stessa sequenza di installazione / disinstallazione riporta i dati immessi originariamente.

Ho provato a visitare visitando /data/data/my package folderper vedere il database è andato dopo la disinstallazione e infatti quella cartella viene eliminata durante la disinstallazione.

Ho provato a eliminare l'app visitando la pagina delle impostazioni, tramite Titanium Backup e i risultati sono gli stessi. Il dispositivo ha il root Nexus 5 con v6.0.

Quale potrebbe essere la ragione di questo strano comportamento?

Risposte:


330

È perché Android 6 ha il backup automatico. È necessario ottimizzare android:allowBackupe android:fullBackupContentnel <application>tag manifest se non si desidera eseguire il backup dei dati o se si desidera includere o escludere alcune risorse. Non è un bug.

Maggiori informazioni su AutoBackup su Android qui .


28
Questa è la risposta corretta e funziona per me (ho avuto lo stesso problema) Per evitare questo comportamento è necessario inserire android: allowBackup = "false" e android: fullBackupContent = "false" in manifest.xml
frusso

33
Nel caso alcuni di voi si chiedano, android: allowBackup e android: fullBackupContent sono proprietà da aggiungere in <application />
Jack '

2
Dalla documentazione: android: fullBackupContent punta al file XML che contiene opzioni di backup. Per impostazione predefinita, viene eseguito il backup della maggior parte dei file. Anche se le impostazioni su "false" non generano alcun errore, immagino che sia sbagliato impostarlo.
bajicdusko,

3
Non so perché hanno mantenuto il comportamento predefinito per eseguire il backup, poiché il comportamento non è sincronizzato con le versioni precedenti, quindi diventa fastidioso. Chi lo vuole potrebbe accenderlo.
Atul,

7
Qualcuno sa come eliminare i backup?
1800 INFORMAZIONI

31

La risposta di greywolf82 è corretta ma voglio aggiungere alcune informazioni a questo.

Durante lo sviluppo della mia app Android (usando Xamarin), ho notato che ogni volta che avrei riavviato l'app da Visual Studio, i miei dati sarebbero tornati ai dati di alcuni mesi fa. Non importava se mi fossi semplicemente fermato ed eseguito nuovamente da VS, o se avessi disinstallato completamente l'app e reinstallata.

Vale anche la pena notare che non abbiamo mai detto esplicitamente all'app di archiviare un backup.

Il backup sembrava anche sovrascrivere i dati più recenti quando si avviava da Visual Studio e abbiamo rapporti di utenti che utilizzano la build di rilascio della nostra app e che anche i dati più recenti vengono sovrascritti dai backup.

Dal momento che non so esattamente quando si verificano backup e ripristini, questa funzione sembra causare solo problemi.

Abbiamo modificato il nostro AndroidManifest come mostrato nel seguente 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 volta impostato esplicitamente il valore su false, tutto sembra funzionare. Mi aspetto che questa sia una funzionalità di attivazione, ma ... sembra che potrebbe essere attivata per impostazione predefinita per le app che non specificano il valore in entrambi i modi.


Grazie. Ho avuto lo stesso problema.
Hadi Fooladi Talari,

15

È necessario controllare le impostazioni di backup e ripristino del dispositivo e disattivare il ripristino automatico (durante la reinstallazione di un'applicazione, verranno ripristinati i dati e le impostazioni di backup.)

La disattivazione del backup automatico è diversa dal ripristino automatico. Se ritieni che sia utile attivare il backup automatico per la tua applicazione, fallo. Ma se ritieni che ciò renderà gli utenti finali che non sono consapevoli che la funzione di ripristino automatico del loro dispositivo è attiva, sentiti libero di disattivarlo.

Nel mio caso, ho disattivato la funzione allowBackup, ma dal momento che avevo già un backup della versione precedente sul Cloud, continuava ancora il ripristino.

Vedi l'immagine come riferimento per un dispositivo Samsung su Android 6.0. Altri dispositivi e versioni potrebbero avere una schermata diversa. Vedi l'immagine sotto.

Impostazioni di ripristino automatico in Backup e ripristino


Ho lo stesso problema, la mia app aveva eseguito il backup dei dati per pochi utenti quando era accesa. Esiste la possibilità di cancellare / eliminare i dati sincronizzati?
Aditya Chauhan,

5

Di recente avevo bisogno di sfruttare queste funzionalità, sono stato in grado di scoprire la documentazione e su test approfonditi questo è ciò che sono stato in grado di dedurre:

Android: allowbackup: eseguirà il backup dei dati delle app locali sul dispositivo su cui si trova.

Android: fullBackupContent - viene utilizzato insieme all'API di ripristino del backup di Google e PU be essere controllato tramite un file xml per specificare esattamente cosa eseguire il backup, nonché una classe BackupManager che è possibile implementare per un ulteriore controllo sul processo.

Tuttavia, la documentazione afferma, e ho confermato con i test, che un ripristino avverrà solo quando il dispositivo verrà ripristinato e il processo di ripristino dei dati dell'app verrà attivato. OPPURE ripristinerà anche quando l'app viene trasferita tramite sideload tramite adb, che è ciò che facciamo quando eseguiamo l'app per il test o il debug sui nostri dispositivi tramite Android Studio. Si noti che se si imposta android: allowbackup ma non si configura android: fullBackupContent con un codice api di Google, i dati delle app vengono archiviati solo localmente, mentre se lo si configura correttamente quindi se è stato eseguito il backup dell'app e si ottiene un nuovo dispositivo, le app i dati sono stati memorizzati sul cloud in modo che possano essere ripristinati su un nuovo dispositivo.


3

L'aggiunta di android: allowBackup = "false" sotto il tag dell'applicazione nel file manifest ha risolto il mio problema.

Ecco la documentazione Android per il backup dei dati utente con Auto Backup


2

Basta cambiare android: allowBackup = "true" in android: allowBackup = "false" in manifiest.xml. Funzionerà.

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

2

In aggiunta a questo, abbiamo scoperto che in Android 9 (su un dispositivo HMD Nokia) erano presenti le risorse, anche dopo aver eliminato l'app tramite l'interfaccia e tramite adb.

La risposta dell'aggiunta:

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

Ovviamente, questa non è una nuova risposta, ma un'osservazione per le persone che si trovavano nella nostra stessa posizione.


2

Se scegli come target Android 10, devi inserire il android:hasFragileUserData="true"tag dell'applicazione diAndroidManifest.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 è una nuova impostazione manifest (sto indovinando). "Se vero, viene richiesto all'utente di conservare i dati dell'app durante la disinstallazione". Questo sembra maturo per abuso, ma posso vedere dove potrebbe essere utile per alcune app.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.