91

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

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

これまでのところ、WebやStackoverflowで答えは見つかりませんでした。

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

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

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

ファイルにを追加するだけallowBackup="true"です。AndroidManifest.xml

4

3 に答える 3

73

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

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

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

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

編集

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

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

アプリのアップグレードで何が必要/起こり得るかを知りたい場合は?、これについては適切な説明がありませんでした。複雑で、、、およびその他のトピックと相対的Android SecurityですApplication signingcopy protectionつまり、上記のフィールドでアプリの状態を変更すると、異なる結果が発生します。
たとえばCHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON、アプリは更新されますが、すべての共有設定が失われ、ファイルアクセスが不可能になり、...。
ただし、条件に注意する必要がありますが、新しいアプリbeing consideredが以前のアプリの更新として発生します(変更できないものを参照)。

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

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

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

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

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

于 2012-09-28T10:10:17.090 に答える
9

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

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

static final long serialVersionUID = 42L;
于 2016-08-20T08:02:51.280 に答える
5

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

于 2012-09-28T10:09:24.827 に答える