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 一段时间或停止使用EncryptedSharedPreferencesandroidx.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 之一的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先迁移 - 我可以针对以前的迁移

未解决的参考:MasterKey

针对 SQL Server 使用 s-s-rS 报告时出错

s-s-rS 2012 - 针对 OLAP 评估多个参数

针对多个版本的 .net 框架

Multisim 版本针对3D元件库说明