Androidアプリを更新するとSharedPreferencesはどうなりますか?


84

アプリのSharedPreferencesにユーザー設定を保存しました。Google Playストア経由でアプリを新しいバージョンのアプリに更新すると、SharedPreferencesはどうなりますか?

SharedPreferncesは更新後も引き続き存在しますか、それとも削除されますか?

これまでのところ、WebまたはStackoverflowで回答が見つかりません(間違ったキーワードで検索できますか?)。

このプロセスを説明しているリンクをいくつか教えていただけますか?

編集: その間私は他の答えも見つけました:更新/アンインストール時のSharedPreferencesの動作

編集2: この質問を最初に行ったかなり前から、Android 6.0(API 23)以降、Googleがここで説明しているように、自動バックアップ機能を使用して共有設定を保護することも可能であることを最近知りました。ただ、追加allowBackup="true"あなたの中AndroidManifest.xmlのファイル。

回答:


70

ここのクリスチャン言います:ユーザーがアップデートをインストールするとき、あなたのアプリケーションデータは残ります。

ただしpackage name、以前のアプリのアップデートとして検出するには、同じである必要があります。

EboMikeは、Androidユーザーに、アプリの更新により古いアプリバージョンのデータが失われる可能性があることを警告していますか?言う:

率直に言って、アップグレードによってデータが失われることは容認できません。

編集

通常、SharedPreferences(および他のユーザーデータ)は更新プロセス中に保持されますが、「不明な」問題が原因でデータが失われることがあり、制御できないと思います。したがって、SharedPreferencesが保持されると単純に信じることができます(ここを参照)。

したがって、アップグレードの進行中にユーザーのデータが消去されないようにする場合は、メインデータを外部ストレージ(SDカードや内部のリムーバブルではないストレージなどのリムーバブルストレージメディアにすることができます)に保存する必要があります。アプリのプライベート。または、少なくともユーザーがアップグレードする前にデータをバックアップできるように保管します。次に、(アップグレードされた)アプリの最初の実行時に、外部ストレージにバックアップファイルがあるかどうかを確認します。

アプリのアップグレードで何が必要/起こり得るかを知りたい場合は、私はthis.Itのための任意の適切な説明が煩雑と相対されなかったAndroid SecurityApplication signingcopy protectionあなたが任意の上記のフィールドでアプリの状態を変更した場合、それは異なる結果を引き起こすことや、他のtopics.Iの平均値。
たとえばCHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON、アプリは更新されますが、共有設定がすべて失われ、ファイルへのアクセスが不可能になり、...。
ただし、条件に注意する必要がありますが、新しいアプリbeing consideredは以前のアプリの更新として発生します(変更できないものを参照)。

また、コードに注意する必要があります。データベースのデータが削除される可能性があります(SQLiteがプリロードされたアプリの更新を参照)。

しかし、最終的には、注意すれば、次のように言うことができます。

更新プロセスはapkファイル(およびその中にあるもの、たとえばドローアブルなど)を置き換えるだけで、データベース、共有設定、および実行時に生成されたその他のファイルを変更しません(おそらくこの場合、新しいアプリは前のアプリのUIDと等しいUID)。

詳細については、次のページをご覧ください。

助けて!?市場でアプリケーションを更新すると、保存されているSharedPreferencesが削除されます。
マーケットコピー防止は、更新後にファイルアクセスを完全に遮断します
誰かがアプリの更新プロセスを説明できますか?


おかげで、SharedPreferencesは問題なく維持されるべきであるように私には思えます。しかし、このプロセスの公式の説明はありませんか?
Bruno Bieri 2012

@viperboneどのプロセスですか?共有設定を宣言しますか?またはアプリをアップグレードしますか?
hasanghaforian 2012

アプリのアップグレードプロセス。アプリのアップグレード時に発生する必要がある/発生する可能性があること。
Bruno Bieri 2012

@viperboneもう一度私の答えを見てください。詳細を追加しました。
hasanghaforian 2012

別の注意:共有設定名がアップグレード間で同じであることを確認してください!私はバージョン間で名前が異なっていたので、新しいバージョンは以前のバージョンから保存された設定を
取得していませんでした

7

4時間以上デバッグした後、モデルをシリアル化して文字列として保存していることがわかりました。シリアル化可能なクラスには、serialVersionUIDという名前の一意のIDがあり ます。これは、実行時にデフォルトで設定され、IDは、クラスの名前、インターフェイス、および変数名によっても計算されます。モデルクラスを変更し、変数を追加してからアプリを更新したことがわかりました。クラスが変更され、新しいserialVersionUIDが設定されたため、更新時に文字列を逆シリアル化してモデルを作成できず、java.io.InvalidClassExceptionが発生していました。

この問題を回避するには、serialVersionUIDを明示的に設定してください

static final long serialVersionUID = 42L;

1
ただし、変更に互換性があることを確認してください。互換性がないと、奇妙なバグが発生する可能性があります。
mjaggard 2018年

5

前回GooglePlayでアプリケーションを更新したとき、sharedPreferencesは影響を受けなかったと思います。
私はそれらを使用して自動的にログインしていましたが、更新後にログインしました。
一ヶ月前のことですが、記憶が曖昧になることがあったので、他の人の意見も聞いたほうがいいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.