Cristian sagt hier : Ihre Anwendungsdaten bleiben erhalten, wenn Benutzer Updates installieren.
Es muss jedoch dasselbe sein package name
, um ein Update der vorherigen App zu erkennen.
EboMike in Warnung Android-Benutzer, dass App-Update zum Verlust von Daten aus der alten App-Version führen könnte? sagt:
Offen gesagt ist es nicht akzeptabel, Daten aufgrund eines Upgrades zu verlieren.
Bearbeiten :
Normalerweise werden die SharedPreferences (sowie andere Benutzerdaten) während des Aktualisierungsvorgangs beibehalten, aber manchmal gehen die Daten aufgrund eines " unbekannten " Problems verloren, und ich denke, sie liegen außerhalb Ihrer Kontrolle. Sie können also einfach glauben, dass die SharedPreferences beibehalten werden ( siehe hier ).
Wenn Sie also vermeiden möchten, dass Benutzerdaten während des Aktualisierungsvorgangs gelöscht werden, müssen Sie die Hauptdaten im externen Speicher speichern (dies kann ein Wechselmedium sein, z. B. eine SD-Karte oder ein interner, nicht entfernbarer Speicher) privat für Ihre App. Oder zumindest für Benutzer zum Sichern von Daten vor dem Upgrade aufbewahren. Überprüfen Sie dann beim ersten Ausführen Ihrer (aktualisierten) App, ob sich eine Sicherungsdatei im externen Speicher befindet oder nicht.
Wenn Sie wissen möchten, was beim Upgrade einer App passieren muss / kann? Habe ich keine gute Beschreibung für this.It kompliziert ist und relativ mit Android Security
, Application signing
, copy protection
und andere topics.I bedeuten , dass , wenn Sie Zustand Ihrer App in allen oben genannten Bereichen zu ändern, es anderes Ergebnis führt.
Wenn Sie beispielsweise CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON
Ihre App aktualisieren, gehen jedoch alle freigegebenen Einstellungen verloren, der Dateizugriff ist unmöglich und ....
Sie müssen sich jedoch um die Bedingungen kümmern, die Ihre neue App being considered
als Update für die vorherige App verursachen (siehe Dinge, die sich nicht ändern können ).
Außerdem müssen Sie sich um Ihren Code kümmern, da dies zum Löschen von Daten Ihrer Datenbanken führen kann (siehe Update-App mit vorinstalliertem SQLite ).
Aber letztendlich können Sie, wenn Sie vorsichtig sind, sagen:
Der Aktualisierungsprozess ersetzt nur die apk-Datei (und damit auch die darin enthaltenen Zeichen, ...) und ändert keine Datenbanken, freigegebenen Einstellungen und andere Dateien, die zur Laufzeit generiert wurden (wahrscheinlich wird in diesem Fall eine neue App mit installiert die UID, die der UID der vorherigen App entspricht).
Sie können diese Seiten für weitere Details sehen:
Hilfe!? Durch die Aktualisierung unserer Anwendung auf dem Markt werden die gespeicherten SharedPreferences gelöscht.
Der Marktkopierschutz unterbricht den Dateizugriff nach dem Update vollständig.
Kann jemand den App-Update-Prozess erklären?
Nachdem ich über 4 Stunden lang debuggt hatte, stellte ich fest, dass ich ein Modell als String speicherte, indem ich es serialisierte. Eine serialisierbare Klasse hat eine eindeutige ID mit dem Namen serialVersionUID , die zur Laufzeit standardmäßig festgelegt wird. Die ID wird auch anhand des Namens der Klasse, der Schnittstellen und der Variablennamen berechnet. Ich fand heraus, dass ich die Modellklasse geändert, eine Variable hinzugefügt und dann die App aktualisiert habe. Da die Klasse jetzt geändert wurde, sodass eine neue serialVersionUID festgelegt wurde und daher beim Update nicht in der Lage war, die Zeichenfolge zu deserialisieren und das Modell zu erstellen, gab sie java.io.InvalidClassException aus
Legen Sie die serialVersionUID explizit fest, um dieses Problem zu vermeiden
quelle
Ich denke, als ich meine Anwendung das letzte Mal über Google Play aktualisiert habe, waren die sharedPreferences nicht betroffen.
Ich habe sie verwendet, um mich automatisch anzumelden, und nach dem Update war dies der Fall.
Es war vor einem Monat, mein Gedächtnis könnte verschwommen sein, also ist es besser, auch die Meinungen anderer Leute zu hören.
quelle