启动活动时,我的应用程序在 getEncryptedSharedPrefs 处崩溃:
if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "")!!.isEmpty()){
getEncryptedSharedPrefs().edit()
.putString("pinSettingsLogin" , "0000")
.apply()
}
出现此错误:
Caused by: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
奇怪的是,这个 if 语句适用于 Android 10 和 11,但不适用于 Android 12。这个 if 语句在这里是因为在下面的“if”中,我检查 pinSettingsLogin = 0000 是否这样,以便它自行进入一个新活动.
if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "").equals("0000")){
val i = Intent(this, SettingsActivity::class.java)
startActivity(i)
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
}
您是否尝试过清除应用程序的缓存?
这可能会解决问题!
我在 1.0.0rc-04 中遇到了这个问题。我可以通过升级到 1.1.0-alpha01 来改进它吗?
implementation "androidx.security:security-crypto:1.1.0-alpha04"
按照文档中给出的方式初始化共享首选项:
val keyGenParameterSpec = MasterKey.Builder(activity)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val sharedPref : SharedPreferences = EncryptedSharedPreferences
.create(activity,"secret_shared_prefs", keyGenParameterSpec, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)