开启ProGuard后flutter_config在Flutter侧无法读取.env返回null
问题根源
开启minifyEnabled true后,ProGuard的代码优化、混淆逻辑会直接破坏两处核心逻辑:
flutter_config的原生插件类、MethodChannel处理方法被重命名或移除,Flutter侧发起的取值请求无法被原生端接收处理dotenv.gradle注入到BuildConfig中的.env对应静态字段,因被ProGuard判定为无直接引用,被优化删除
解决方案
1. 配置ProGuard保留规则
打开android/app/proguard-rules.pro,添加以下规则:
# 保留所有Flutter插件实现类,避免跨端调用方法被混淆 -keep class * extends io.flutter.plugin.common.FlutterPlugin { *; } -keepclassmembers class * extends io.flutter.plugin.common.FlutterPlugin { public *; } # 保留项目BuildConfig中所有静态字段(含.env注入的配置项) -keep class <你的应用ID>.BuildConfig { *; } -keepclassmembers class <你的应用ID>.BuildConfig { public static <fields>; } # 防止MethodChannel基础类被混淆,保障跨端调用链路正常 -keep class io.flutter.plugin.common.** { *; }
注:替换
<你的应用ID>时,直接复制build.gradle中defaultConfig块下的applicationId值即可。
2. 移除debug构建的不必要混淆配置
当前配置给debug构建也开启了minifyEnabled true和useProguard,会拖慢编译速度、导致调试断点失效,还会在开发阶段就出现配置读取异常。修改buildTypes下的debug配置:
debug { signingConfig signingConfigs.debug // 关闭debug构建混淆,仅release包开启混淆即可 useProguard false minifyEnabled false }
3. 额外优化(仅规则生效后仍有异常时添加)
如果按上述配置后仍无法读取,可在proguard-rules.pro中添加规则,关闭对BuildConfig类的优化逻辑:
-optimizations !class/unboxing/enum
内容的提问来源于stack exchange,提问作者Definitely Not Ayo
相关产品推荐
相关产品推荐

