SharedPreferencesに出力したデータの保存場所と形式

SharedPreferencesを使ったデータの保存と読込は、古のWindowsのiniファイル同様に簡便なものだ。
実装はJavaのPreference APIにより行われており、例えばWindowsの実装の場合はレジストリに保存されるが、Androidの場合どのようになっているのだろう。(やってみれば分かることなのだが)

    • thisはActivity等のコンテキスト
SharedPreferences preferenceService = PreferenceManager.getDefaultSharedPreferences(this);
preferenceService.edit().putString("credentials", "Kazzz, Kazzz").commit();

上記のコードでプリファレンスを保存した場合

/data/data/"パッケージ名"/shared_prefs/"パッケージ名_preference.xml"
    • パッケージ名_preference.xmlの形式
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
  <string name="credentials">Kazzz, Kazzz</string>
</map>

実体はこのように、パッケージローカルのディレクトリにマップをシリアライズした際と似た形式で単なるXMLとして保存される。
保存した値の読出しも簡単。

SharedPreferences preferenceService = PreferenceManager.getDefaultSharedPreferences(this);
String credentials = preferenceService.getString(credentials , null);

以上、手軽に使えるがDDMSや実機から見える位置に保存されているので、パスワードなど機密に関わる情報はそもそもSharedPreferencesを使わないか、使ったとしても何らかの暗号化が必要だろう。