Flutter 3.22更新后Android Minify(代码混淆)异常问题
Flutter 3.22 搭配 flutter_paytabs_bridge ^2.6.11 触发R8编译错误的解决方案
问题详情
Flutter版本升级至3.22后,运行项目时持续触发R8编译空指针异常,报错信息如下:
ERROR:C:\Users\GS\.gradle\caches\transforms-3\9233cff7f1f1cb0a6e3f605b6bc688c6\transformed\lifecycle-livedata-core-2.8.0-runtime.jar: R8: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:minifyDebugWithR8'. > A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable > Compilation failed to complete, origin: C:\Users\GS\.gradle\caches\transforms-3\9233cff7f1f1cb0a6e3f605b6bc688c6\transformed\lifecycle-livedata-core-2.8.0-runtime.jar:androidx/lifecycle/LiveData$1.class
经排查,该问题仅在使用flutter_paytabs_bridge ^2.6.11时出现,已联系包官方支持。
可行解决方法
1. 强制降级Lifecycle依赖版本
Flutter 3.22默认引入的lifecycle-livedata-core 2.8.0与paytabs包存在兼容性问题,可通过强制指定低版本依赖规避:
在android/app/build.gradle中添加如下配置:
configurations.all { resolutionStrategy { force 'androidx.lifecycle:lifecycle-livedata-core:2.7.0' force 'androidx.lifecycle:lifecycle-viewmodel:2.7.0' force 'androidx.lifecycle:lifecycle-runtime:2.7.0' } }
2. 调试环境临时禁用R8
若仅调试阶段受影响,可临时关闭R8混淆验证问题根源:
修改android/app/build.gradle的buildTypes节点:
buildTypes { debug { minifyEnabled false shrinkResources false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
注意:发布版本请勿禁用R8,此方法仅作临时排查使用。
3. 降级flutter_paytabs_bridge版本
尝试回退到该包之前的稳定版本(如^2.6.10),修改pubspec.yaml:
dependencies: flutter_paytabs_bridge: ^2.6.10
执行flutter pub get更新依赖后重新构建。
4. 清理Gradle缓存
缓存损坏也可能导致此类编译异常,执行以下操作后重试:
- 运行
flutter clean - 删除项目
android/.gradle目录 - 重新执行
flutter run
原因分析
该错误本质是R8混淆器处理lifecycle-livedata-core 2.8.0字节码时,与flutter_paytabs_bridge包的代码逻辑产生兼容性冲突。Flutter 3.22升级了Android侧依赖版本,而当前版本的paytabs包尚未完成适配,导致混淆过程中触发空指针异常。
内容的提问来源于stack exchange,提问作者Omar Qataberi
相关产品推荐
相关产品推荐

