Eine Android-App speichert ihre Daten nach der Deinstallation und Neuinstallation

191

Bei der Entwicklung einer Android-App für alle Versionen über 4.1 habe ich festgestellt, dass durch Deinstallieren und erneutes Installieren der App die Daten nicht gelöscht werden.

Die App ist so konzipiert, dass die angeforderten Details auf dem ersten Bildschirm gespeichert werden. Nach der Deinstallation und erneuten Installation in OS Version 4.4.4 fordert die App den Benutzer auf, die Daten einzugeben, was normal ist. In Version 6.0 bringt dieselbe Installations- / Deinstallationssequenz jedoch die ursprünglich eingegebenen Daten zurück.

Ich habe versucht, durch einen Besuch sicherzustellen /data/data/my package folder, dass die Datenbank nach der Deinstallation nicht mehr vorhanden ist und dieser Ordner während der Deinstallation gelöscht wird.

Ich habe versucht, die App durch Aufrufen der Einstellungsseite über Titanium Backup zu löschen. Die Ergebnisse sind dieselben. Auf dem Gerät ist Nexus 5 mit Version 6.0 gerootet.

Was könnte der Grund für dieses seltsame Verhalten sein?

Narayanan
quelle

Antworten:

322

Dies liegt daran, dass Android 6 über ein automatisches Backup verfügt. Sie müssen stimmen android:allowBackupund android:fullBackupContentin Ihrem Manifest - <application>Tag , wenn Sie gesichert Ihre Daten nicht wollen oder wenn Sie wollen enthalten oder einige Ressourcen auszuschließen. Es ist kein Fehler.

Mehr über AutoBackup auf Android hier .

greywolf82
quelle
27
Dies ist die richtige Antwort und sie funktioniert für mich (ich hatte das gleiche Problem). Um dieses Verhalten zu vermeiden, müssen Sie android: allowBackup = "false" und android: fullBackupContent = "false" in manifest.xml
frusso
32
Falls sich einige von Ihnen fragen, sind android: allowBackup und android: fullBackupContent Eigenschaften, die in <application /> hinzugefügt werden müssen
Jack
2
Aus der Dokumentation: android: fullBackupContent verweist auf eine XML-Datei, die Sicherungsoptionen enthält. Standardmäßig werden die meisten Dateien gesichert. Obwohl die Einstellung "false" keinen Fehler auslöst, ist die Einstellung vermutlich falsch.
Bajicdusko
3
Ich bin mir nicht sicher, warum sie das Standardverhalten für die Sicherung beibehalten haben, da das Verhalten nicht mit früheren Versionen synchronisiert ist und daher ärgerlich wird. Wer es will, kann es einschalten.
Atul
7
Weiß jemand, wie man die Backups löscht?
1800 INFORMATION
29

Die Antwort von greywolf82 ist richtig, aber ich möchte einige Informationen hinzufügen.

Bei der Entwicklung meiner Android-App (mit Xamarin) habe ich festgestellt, dass meine Daten bei jedem Neustart der App aus Visual Studio wieder auf Daten von vor einigen Monaten zurückgesetzt wurden. Es war egal, ob ich es einfach gestoppt und von VS erneut ausgeführt habe oder ob ich die App vollständig deinstalliert und neu installiert habe.

Es ist auch erwähnenswert, dass wir der App nie ausdrücklich gesagt haben, dass sie ein Backup speichern soll.

Die Sicherung schien auch neuere Daten beim Start von Visual Studio zu überschreiben, und wir haben Berichte von Benutzern, die den Release-Build unserer App verwenden und auch neuere Daten durch die Sicherungen überschrieben bekommen.

Da ich nicht genau weiß, wann Sicherungen und Wiederherstellungen stattfinden, scheint diese Funktion nur Probleme zu verursachen.

Wir haben unser AndroidManifest wie in der folgenden XML gezeigt geändert:

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

Sobald wir den Wert explizit auf false gesetzt haben, scheint alles zu funktionieren. Ich würde erwarten, dass dies eine Anmeldefunktion ist, aber ... scheint standardmäßig für Apps aktiviert zu sein, die den Wert in keiner Weise angeben.

Victor Chelaru
quelle
Vielen Dank. Ich hatte das gleiche Problem.
Hadi Fooladi Talari
15

Sie sollten die Sicherungs- und Rücksetzeinstellungen Ihres Geräts überprüfen und die automatische Wiederherstellung deaktivieren (bei der Neuinstallation einer Anwendung werden gesicherte Einstellungen und Daten wiederhergestellt.)

Das Deaktivieren der automatischen Sicherung unterscheidet sich von der automatischen Wiederherstellung. Wenn Sie der Meinung sind, dass es hilfreich ist, die automatische Sicherung für Ihre Anwendung zu aktivieren, tun Sie dies. Wenn Sie jedoch der Meinung sind, dass Endbenutzer, die nicht wissen, dass die automatische Wiederherstellungsfunktion ihres Geräts aktiviert ist, diese Funktion deaktivieren können, können Sie sie deaktivieren.

In meinem Fall habe ich die Funktion allowBackup deaktiviert, aber da ich bereits ein Backup der vorherigen Version in der Cloud hatte, wurde sie immer noch wiederhergestellt.

Siehe Bild als Referenz für ein Samsung-Gerät unter Android 6.0. Andere Geräte und Versionen haben möglicherweise einen anderen Bildschirm. Siehe Bild unten.

Automatische Wiederherstellungseinstellung unter Sichern und Zurücksetzen

Matcieou7th
quelle
Ich habe das gleiche Problem, meine App hatte Daten für wenige Benutzer gesichert, als sie aktiviert war. Gibt es eine Möglichkeit, synchronisierte Daten zu löschen / zu verwerfen?
Aditya Chauhan
5

Ich musste kürzlich diese Funktionen nutzen, konnte die Dokumentation aufdecken und nach umfangreichen Tests konnte ich Folgendes ableiten:

Android: allowbackup - sichert lokale App-Daten auf dem Gerät, auf dem es sich befindet.

Android: fullBackupContent - wird in Verbindung mit der Backup-Wiederherstellungs-API von Google verwendet und kann über eine XML-Datei gesteuert werden, um anzugeben, was genau gesichert werden soll, sowie über eine BackupManager-Klasse, die Sie zur weiteren Kontrolle des Prozesses implementieren können.

In der Dokumentation heißt es jedoch, und ich habe beim Testen bestätigt, dass eine Wiederherstellung nur dann erfolgt, wenn das Gerät wiederhergestellt und der Datenprozess der Wiederherstellungs-App ausgelöst wird. ODER es wird auch wiederhergestellt, wenn die App über adb von der Seite geladen wird. Dies tun wir, wenn wir die App zum Testen oder Debuggen auf unseren Geräten über Android Studio ausführen. Beachten Sie, dass, wenn Sie android: allowbackup festlegen, android: fullBackupContent jedoch nicht mit einem Google-API-Code konfigurieren, die Apps-Daten nur lokal gespeichert werden. Wenn Sie sie ordnungsgemäß konfiguriert haben, werden Ihre Apps gesichert, wenn Ihre App gesichert wurde und Sie ein neues Gerät erhalten Daten wurden in der Cloud gespeichert, damit sie auf einem neuen Gerät wiederhergestellt werden können.

Xijukx
quelle
3

Das Hinzufügen von android: allowBackup = "false" unter dem Anwendungs-Tag in der Manifest-Datei hat mein Problem behoben.

Hier ist die Android-Dokumentation zum Sichern von Benutzerdaten mit Auto Backup

Vinay John
quelle
2

Ändern Sie einfach android: allowBackup = "true" in android: allowBackup = "false" in manifestiest.xml. Es wird gearbeitet.

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

Wir haben nur hinzugefügt, dass in Android 9 (auf einem HMD-Nokia-Gerät) die Assets auch nach dem Löschen der App über die Benutzeroberfläche und über adb gespeichert waren.

Die Antwort des Hinzufügens:

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

Dies ist natürlich keine neue Antwort - sondern eine Beobachtung für Menschen, die sich in derselben Position wie wir befanden.

JRK
quelle
2

Wenn Sie auf Android 10 abzielen, müssen Sie das android:hasFragileUserData="true"Anwendungstag von eingebenAndroidManifest.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 ist eine neue Manifest-Einstellung (ich vermute auf). "Wenn true, wird der Benutzer aufgefordert, die Daten der App bei der Deinstallation beizubehalten." Dies scheint reif für Missbrauch zu sein, aber ich kann sehen, wo es für einige Apps nützlich sein könnte.

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

Manohar Reddy
quelle