So entfernen Sie gemeinsame Einstellungen während der Deinstallation der Anwendung in Android

103

Ich habe eine Android-Anwendung, um die Anmeldedaten wie Benutzername und Passwort zu SharedPreferencesspeichern. Das funktioniert einwandfrei, aber ich muss alle meine SharedPreferenceswährend der Deinstallation meiner Anwendung verwendeten entfernen . Wie es geht?

SavePreferences("one ", "");
SavePreferences("two", "");
LoadPreferences();

 private void SavePreferences(String key, String value){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
   }

 private void LoadPreferences(){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    String strSavedMem1 = sharedPreferences.getString("MEM1", "");
    String strSavedMem2 = sharedPreferences.getString("MEM2", "");   
   } 

Ich möchte dies entfernen, SharedPreferenceswenn meine Anwendung deinstalliert wird.

Shivcena
quelle
11
Dies wird automatisch von Android OS bei der Deinstallation der Anwendung entfernt ...
umair.ali
Vielen Dank für das wertvolle Detail
Shivcena
Nicht auf meinem verwurzelten Samsung Galaxy 1 (Froyo). Immer noch in /dbdata/database/my.package/shared_prefs. Ich weiß nicht, ob das so ist, weil es verwurzelt ist oder weil es Froyo ist. Ich konnte nicht mit neueren Geräten testen
Nilzor

Antworten:

19

SharedPreferences wird immer zusammen mit der App-Deinstallation gelöscht.

Wenn Sie eine Anwendung deinstallieren, werden alle Änderungen, die die Anwendung in Ihrem internen Speicher vorgenommen hat, widerrufen. Dies bedeutet, dass Ihre SharedPreference-Dateien, andere Datendateien, Datenbankdateien und Anwendungen vom Android-Betriebssystem automatisch entfernt werden.

EDITED: 29/04/15: Für> = 21 API siehe @ Maher Abuthraas Antwort

Dhaval Parmar
quelle
10
Dies ist beim Nexus 6P nicht der Fall, wenn Sie dies jetzt herausfinden.
AndyRoid
1
Ja, ich habe auch festgestellt, dass in Nexus 5 mit Android 6 die freigegebenen Einstellungen nicht gelöscht werden. Ich musste das Gerät nach der Deinstallation neu starten und die gemeinsamen Einstellungen sind jetzt weg
Santhana
2
Galaxy S7 hier mit dem gleichen Problem. I Deinstallieren und nach der Installation sind die freigegebenen Einstellungen weiterhin festgelegt. Wirklich ärgerlich, weil ich Neuinstallationen nicht testen kann, indem ich sie einfach deinstalliere.
Dpedrinha
2
@ Maher Abuthraa hat eine richtige Antwort Diese Antwort ist falsch.
26рій Мазуревич
1
Samsung s8 s8 + Gerät auch nicht löschen gemeinsame Präferenz, habe ich vor kurzem getestet. Wirklich enttäuscht von Samsung
Vrajesh
298

Das Problem liegt nicht bei den Einstellungen. Es ist drastisch der Backup-Manager ! .. da Android-23 standardmäßig Backup als Task die Daten der App speichert, einschließlich der Einstellungen für die Cloud. Später, wenn Sie die neuere Version deinstallieren und installieren, werden Sie wahrscheinlich wiederhergestellte Einstellungen verwenden. Um dies zu vermeiden, fügen Sie dies einfach Ihrem Manifest hinzu (oder zumindest, um das Manifest zu debuggen):

<application ...
        android:allowBackup="false">
...
</application>

Lesen Sie dies: http://developer.android.com/guide/topics/data/backup.html

Sie werden das auch sehen, wenn Sie Lint ausführen unter Android > Lint > Security:

Flusenwarnung beim Backup

Es ist gut zu erwähnen, dass der Sicherungsprozess wie eine Blackbox ist. Sie wissen nicht, wann er beginnt und zwischen den Überprüfungen liegt. Besser für die Entwicklung, um ihn zu deaktivieren.

==== Update ====

Nach dem Festlegen allowbackupvon können Probleme mit der Manifest-Fusion auftreten false. Um dieses Problem zu beheben, fügen Sie Folgendes hinzu:

tools:replace="android:allowBackup"

im Anwendungselement. Gutschrift an @ shahzain-ali

Alternativ können Sie den Cache leeren, bevor Sie die App deinstallieren.

Ich hoffe das kann helfen.

Maher Abuthraa
quelle
4
Hey, ich habe festgestellt, dass bei einigen Geräten die freigegebenen Einstellungen nach dem Neustart des Geräts beibehalten werden. Ist das damit verbunden? Wenn ja, ist es sicher, dieses Flag in Produktions-Apps auf false zu setzen? Wird es den Benutzer betreffen?
Eliahu Horwitz
Es wird nicht empfohlen, in der Produktion den
Wert false festzulegen
1
Kudos @MaherAbuthraa .. Ich hatte das Problem, dass bestimmte gemeinsame Präferenzdaten nach der Deinstallation und Neuinstallation der App beibehalten wurden. Ich wusste nie, dass so etwas getan wird.
SoulRayder
1
Vielen Dank! du hast mein Leben gerettet.
hungtdo
Wie kann ich sicherstellen, dass die Einstellungen während des Updates beibehalten, aber bei der manuellen Deinstallation entfernt werden? Dies wäre sicherlich das erwartete Verhalten.
Gannet
10

Es ist seltsam, aber ich habe die Lösung folgendermaßen gefunden:

  1. Hinzufügen xmlns:tools="http://schemas.android.com/tools" Sie in manifest - Tag von Manifest.xml Datei
  2. Fügen Sie android:allowBackup="false"in Anwendung Tag der Manifest.xml Datei
  3. Fügen Sie tools:replace="android:allowBackup"in Anwendung Tag der Manifest.xml Datei

Die Datei Manifest.xml sollte folgendermaßen aussehen.

    <?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.package">

        // Other code

    <application
        android:name="com.package.Application"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:icon="@drawable/appicon"
        android:label="@string/application_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme"
        tools:replace="android:allowBackup">

        <activity
            android:name="com.package.SplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/application_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        // Other code

    </application>

    </manifest>

Es ist fertig.

Hiren Patel
quelle
2
Ihr Problem war, dass eines Ihrer Module / AARs android: allowBackup = "true" hat. Deshalb müssen Sie es mit Attribut-Tools erneut einrichten: replace.
Maher Abuthraa
Obwohl ich meine Vorlieben beibehalten habe android:allowBackup="false"und tools:replace="android:allowBackup"immer noch erhalte, gibt es eine Idee, worum es geht?
Shylendra Madda
Ich bekomme auch das gleiche Problem. Nach dem Hinzufügen dieses Codes kann die Voreinstellung nicht gelöscht werden
Pawan Soni
5

Das Problem liegt nicht bei den Einstellungen.

Verwenden Sie diesen Code, um das Problem zu beheben ..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
Mohammad Faizan
quelle
Das hat geholfen. Übrigens, warum setzen wir allowbackup nicht auf false?
Shakle
3

Durch das Festlegen wird allowBackup="false"eine Anwendung sowohl für die Sicherung als auch für die Wiederherstellung deaktiviert.

 android:allowBackup="false"
Mahendran Candy
quelle
-1

Freigegebene Einstellungen werden ab Marshmallow nicht mehr immer gelöscht. Fügen Sie diese Zeile in Ihr Manifest ein: "android: allowBackup =" false ""

Binyamin Robbins
quelle