android

 

Android SharedPreferencesの種類

Key-Valueペアの読み書きを行う時の候補です。

  • SharedPreferences
  • EncryptedSharedPreferences
  • Preferences DataStore

SharedPreferences

API level 1から存在するKey-Valueを保存する時のAPIです。
SharedPreferencesにはUIスレッドで安全に呼び出せないことがまれにあります。

参考

EncryptedSharedPreferences

SharedPreferencesクラスをラップしたキーと値を自動的に暗号化するJetpackライブラリです。

キーは、暗号化された状態でも検索できるように、決定性暗号化アルゴリズムを使用して暗号化されます。
値は、AES-256 GCM を使用して暗号化されます。これは非決定性です。

ただしサポートされている端末の制限があり、現在(2022/5/1)安定版の1.0.0ではAndroid 6.0(API レベル 23)以降を搭載した端末がサポートされています。

Preferences DataStore

Key-Valueペアや任意の型付きのオブジェクトを格納できるJetpackライブラリです。
DataStoreはKotlinコルーチンとフローを使用して、データを非同期的で扱うことができます。

SharedPreferencesとDataStoreの違い

出典:https://developer.android.com/codelabs/android-preferences-datastore#3

ファイル構造

  • SharedPreferences

  • EncryptedSharedPreferences

  • Preferences DataStore

SharedPreferencesの保存場所の確認方法はこちら

読み書きの仕方

  • SharedPreferences

    val normalPreferences = context.getSharedPreferences(NORMAL_FILE_NAME, Context.MODE_PRIVATE)
    // Read
    normalPreferences.getString("normal-preferences-key", "Nothing")
    // Write
    normalPreferences
    .edit()
    .putString("normal-preferences-key", "normal-preferences-value")
    .apply()
  • EncryptedSharedPreferences

    val encryptedPreferences = EncryptedSharedPreferences.create(
    ENCRYPTED_FILE_NAME,
    mainKeyAlias,
    context,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    )
    // Read
    encryptedPreferences.getString("encrypted-preferences-key", "Nothing")
    // Write
    encryptedPreferences
    .edit()
    .putString("encrypted-preferences-key", "encrypted-preferences-value")
    .apply()
  • Preferences DataStore

    val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    val PREFERENCES_DATA_STORE_KEY = stringPreferencesKey("preferences-dataStore-key")
    // Read
    context.dataStore.data
    .catch { exception ->
        if (exception is IOException) {
            emit(emptyPreferences())
        } else {
            throw exception
        }
    }
    .map { preferences ->
        preferences[PREFERENCES_DATA_STORE_KEY] ?: ""
    }
    // Write
    context.dataStore.edit { settings ->
    settings[PREFERENCES_DATA_STORE_KEY] = "preferences-dataStore-value"
    }

Android SharedPreferencesの確認方法前のページ

ハッシュアルゴリズムとソルト次のページ

関連記事

  1. android

    Android SharedPreferencesの確認方法

    androidアプリでデータを永続化する時に使うSharedPrefe…

  2. android

    ハッシュアルゴリズムとソルト

    ハッシュについて元データに対して後述するアルゴリズムを使って、単体で…

  3. android

    Android 公開鍵暗号方式と共通鍵暗号方式を使った暗号化・復号化

    公開鍵暗号方式暗号化に公開鍵、復号に秘密鍵を使う暗号方式アプリ側…

  4. android

    【最短!】パッケージ名の変更方法

    どうも、フリーランスエンジニアのyoshikiです。&…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

  1. android

    Android SharedPreferencesの確認方法
  2. LINE Bot

    【2018年 LINE Bot 作り方】GASで支出管理Botを作ってみた
  3. LINE Bot

    【誰でもできる!】自分用LINE BOTの作り方
  4. android

    ハッシュアルゴリズムとソルト
  5. android

    【最短!】パッケージ名の変更方法
PAGE TOP