ただの備忘録なのであまり本質的でないです。
困ったこと
昨日まで動いていた開発中のAndroidアプリが、エミュレータ上で落ちる。
#どこで落ちているか
ここ。つまりEncryptedSharedPreferencesを開くところ。
@Synchronized
fun getPreferences(): SharedPreferences {
val masterKey = MasterKey.Builder(getApplication(), MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
return EncryptedSharedPreferences.create(getApplication(),
"my_app",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
}
※「ここを呼び出している大元のクラス」が例外を吐いた後、改めてここが例外を吐くので、一見気付かないことがある(これではまった)。
#何が原因か
エミュレータおよび一部実機のAndroidKeyStoreの実装がおかしいらしい。
#ワークアラウンド
AVD Managerで当該エミュレータのAVDを Stop→Wipe Data→Launch してから改めてアプリを起動。
androidx.security:security-crypto
ライブラリのバージョンによって治ったり治らなかったりするいう報告もあり。