security-crypto:针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一
Posted
技术标签:
【中文标题】security-crypto:针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一【英文标题】:security-crypto: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent 【发布时间】:2021-11-29 12:43:13 【问题描述】:定位 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 是可变的时才使用 FLAG_MUTABLE,例如如果它需要与内联回复或气泡一起使用。
堆栈跟踪:
com.google.crypto.tink.shaded.protobuf.FieldType$Collection。 (FieldType.java:337) androidx.security.crypto.EncryptedSharedPreferences$PrefKeyEncryptionScheme。 (EncryptedSharedPreferences.java:148) PreferenceHelper$Companion.init (PreferenceHelper.kt:41)
这就是我初始化 SharedPreferences 的方式:
private lateinit var preferences: SharedPreferences
fun init(context: Context)
val mainKey = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
preferences = EncryptedSharedPreferences.create(
SHARED_PREF_KEY,
mainKey,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, <- this is the 41 line number, where its crashing
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
有什么帮助吗?
【问题讨论】:
如果您确定这是触发该错误的代码,那么您需要将您的targetSdkVersion
降回 30 一段时间或停止使用EncryptedSharedPreferences
。 androidx.security
已经有近一年没有更新了,它早于这个新的 Android 12 限制。
【参考方案1】:
尝试将以下行添加到您的 :app
(模块级)build.gradle
依赖项中:
implementation 'androidx.work:work-runtime-ktx:2.7.1'
【讨论】:
WorkManager
与问题有何关联?
谢谢@hata,为我工作【参考方案2】:
添加此依赖项为我解决了这个问题。
implementation 'androidx.work:work-runtime-ktx:2.7.1'
【讨论】:
以上是关于security-crypto:针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一的主要内容,如果未能解决你的问题,请参考以下文章