API 34 Release模式下Awesome Notifications初始化报错求助
解决Flutter Awesome Notifications在API34 Release模式下的初始化报错问题
问题根因
报错信息里的SHARED_PREFERENCES_NOT_AVAILABLE, class p2.b isn't parameterized,本质是Release模式开启代码混淆(minifyEnabled true)后,ProGuard将Awesome Notifications依赖的SharedPreferences相关泛型类重命名并移除了参数化信息,导致初始化时无法正确调用sharedPreferences.get方法。Debug模式未开启混淆,所以运行正常。
解决方案
在项目的android/app/proguard-rules.pro文件中添加以下混淆规则,保护相关类不被混淆:
# 保护Awesome Notifications全量类与接口 -keep class me.carda.awesome_notifications.** { *; } -keep interface me.carda.awesome_notifications.** { *; } # 保留SharedPreferences相关泛型类的参数化信息 -keepclassmembers class ** { @androidx.preference.PreferenceManager *; @android.content.SharedPreferences *; } # 强制保留泛型签名与内部类,防止ProGuard移除关键信息 -keepattributes Signature, InnerClasses
如果项目依赖shared_preferences插件,补充添加该插件的混淆规则:
# 保护SharedPreferences插件类 -keep class io.flutter.plugins.sharedpreferences.** { *; }
验证步骤
- 确认
build.gradle的Release配置已正确引入自定义混淆文件:release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 其他原有配置 } - 清理缓存并重新构建Release版本:
flutter clean flutter build apk --release
内容的提问来源于stack exchange,提问作者Rian Pratama
相关产品推荐
相关产品推荐

