2015-10-16 15 views
57

Durante lo sviluppo di un'app per Android con tutte le versioni precedenti alla 4.1, ho osservato che disinstallare la mia app e installarla di nuovo non cancella i suoi dati.Un'app Android memorizza i suoi dati dopo la disinstallazione e la reinstallazione

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

Ho provato a verificare visitando /data/data/my package folder per 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 è rooted Nexus 5 con v6.0.

Quale potrebbe essere la ragione di questo strano comportamento?

risposta

111

È perché Android 6 ha un backup automatico. È necessario sintonizzare android:allowBackup e android:fullBackupContent nel file manifest se non si desidera eseguire il backup dei dati o se si desidera includere o escludere alcune risorse. Non è un bug.

+12

Questa è la risposta corretta e il lavoro per me (ho avuto lo stesso problema) Per evitare questo Comportamento è necessario mettere ** android: allowBackup = "false" ** e ** Android: fullBackupContent =" false "** in manifest.xml – frusso

+18

Nel caso in cui alcuni di voi si chiedano, android: allowBackup e android: fullBackupContent sono proprietà da aggiungere in Jack

+1

Dalla documentazione: android: fullBackupContent punta al file XML che contiene opzioni di backup. Per impostazione predefinita, la maggior parte dei file viene sottoposta a backup. Sebbene le impostazioni su "false" non attivino alcun errore, suppongo che sia sbagliato impostare. – bajicdusko

4

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

Durante lo sviluppo della mia app per Android (utilizzando Xamarin), ho notato che ogni volta che riavviavo l'app da Visual Studio, i miei dati tornavano ai dati di alcuni mesi fa. Non importa se ho semplicemente interrotto e ri-eseguito da VS, o se ho disinstallato completamente l'app e reinstallato.

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

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

Poiché non so esattamente quando si verificano backup e ripristini, questa funzione sembra causare solo problemi.

Abbiamo modificato la nostra AndroidManifest come mostrato nella 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 che abbiamo impostato in modo esplicito il valore false, tutto sembra funzionare. Mi aspetto che questa sia una funzione di attivazione, ma ... sembra che potrebbe essere attivata per impostazione predefinita per le app che non specificano il valore in entrambi i casi.

1

Si dovrebbe controllare backup del dispositivo e Reset impostazioni e disattivare il ripristino automatico (durante la reinstallazione di un'applicazione, eseguire il backup delle impostazioni e dei dati verranno ripristinate.)

Disattivazione auto-backup è diverso dal auto- ristabilire. Se pensi che sarà utile attivare il backup automatico per la tua applicazione, fallo. Ma se pensi che questo renderà gli utenti finali che non sono a conoscenza del fatto che la funzione di ripristino automatico del loro dispositivo è attiva, sentiti libera di spegnerla.

Nel mio caso, ho disattivato la funzione allowBackup, ma poiché avevo già un backup della versione precedente sul Cloud, continuava a essere ripristinata.

Vedere l'immagine come riferimento per un dispositivo Samsung su Android 6.0. Altri dispositivi e versioni potrebbero avere uno schermo diverso.Vedi l'immagine qui sotto.

Automatic Restore Setting under Backup and Reset

0

Recentemente ho bisogno di approfittare di queste caratteristiche, sono stato in grado di scoprire la documentazione e su numerosi test questo è quello che ho potuto dedurre:

Android: allowbackup - sarà di backup locale dati dell'app sul dispositivo su cui si trova.

Android: fullBackupContent - viene utilizzato in concomitanza con il ripristino api di backup di Google e PU CAN essere controllato tramite un file xml per specificare cosa esattamente eseguire il backup, oltre a una classe di BackupManager che è possibile implementare per un ulteriore controllo del processo.

Tuttavia, la documentazione indica, e ho confermato con test, che un ripristino si verifica solo quando il dispositivo viene ripristinato e viene avviato il processo di ripristino dei dati dell'app. O ripristinerà anche quando l'app viene trasferita tramite adb, che è ciò che facciamo quando eseguiamo l'app per testare o eseguire 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 memorizzati solo localmente, mentre se è stato configurato correttamente, se l'app è stata sottoposta a backup e si ottiene un nuovo dispositivo, le app i dati sono stati archiviati nel cloud in modo che possa essere ripristinato su un nuovo dispositivo.

Problemi correlati