Flutter 3.35.0升级后Android Release构建启动时出现NullPointerException崩溃
Flutter 3.35.0升级后Android Release构建启动时出现NullPointerException崩溃
问题描述
我最近把Flutter SDK从3.32.7升级到3.35.0后,遇到了个棘手的问题:Debug模式下App运行完全正常,但Release构建一启动就崩溃,以下是Android端的崩溃栈:
FATAL EXCEPTION: main E/AndroidRuntime(28502): Process: com.hexaview.app, PID: 28502 E/AndroidRuntime(28502): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hexaview.app/com.hexaview.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void Z2.j.D(java.lang.String, w7.d)' on a null object reference E/AndroidRuntime(28502): at o.k.D(Unknown Source:4) E/AndroidRuntime(28502): at w7.q.b(Unknown Source:33) E/AndroidRuntime(28502): at o7.a.<init>(SourceFile:18) E/AndroidRuntime(28502): at o.k.<init>(SourceFile:7) E/AndroidRuntime(28502): at n7.c.<init>(SourceFile:15) E/AndroidRuntime(28502): at n7.g.a(Unknown Source:85) E/AndroidRuntime(28502): at m7.c.onCreate(Unknown Source:252)
我已经尝试过的操作
- 回退到Flutter 3.32.7后,Release模式完全正常,没有崩溃
- 仅在升级到3.35.0后出现问题,Debug构建始终正常
- 已更新
settings.gradle中的依赖版本:id "com.android.application" version "8.6.0" apply false id "org.jetbrains.kotlin.android" version "2.0.0" apply false id "com.google.gms.google-services" version "4.4.2" apply false id "com.google.firebase.crashlytics" version "3.0.2" apply false - 已更新Gradle wrapper:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip - 执行过
flutter clean、./gradlew clean并重新构建,问题依旧 - 附上我的
flutter doctor -v结果确保环境正常:[✓] Flutter (Channel stable, 3.35.4, on macOS 26.0 25A354 darwin-arm64, locale en-IN) • Flutter version 3.35.4 on channel stable at /Users/shashankjain/src/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision d693b4b9db (2 weeks ago), 2025-09-16 14:27:41 +0000 • Engine revision c298091351 • Dart version 3.9.2 • DevTools version 2.48.0 • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-lldb-debugging [✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0) • Android SDK at /Users/shashankjain/Library/Android/sdk • Emulator version 36.1.9.0 (build_id 13823996) (CL:N/A) • Platform android-36, build-tools 36.0.0 • Java binary at: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/java This JDK is specified in your Flutter configuration. To change the current JDK, run: `flutter config --jdk-dir="path/to/jdk"`. • Java version Java(TM) SE Runtime Environment (build 17.0.6+9-LTS-190) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 26.0.1) • Xcode at /Applications/Xcode.app/Contents/Developer • Build 17A400 • CocoaPods version 1.16.2 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2025.1) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 21.0.6+-13391695-b895.109) [✓] VS Code (version 1.104.2) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.120.0 [✓] Connected device (3 available) • Redmi Note 9 Pro (mobile) • 2c48028 • android-arm64 • Android 12 (API 31) • macOS (desktop) • macos • darwin-arm64 • macOS 26.0 25A354 darwin-arm64 • Chrome (web) • chrome • web-javascript • Google Chrome 140.0.7339.208 ! Error: Browsing on the local area network for Shashank’s iPhone. Ensure the device is unlocked and attached with a cable or associated with the same local area network as this Mac. The device must be opted into Developer Mode to connect wirelessly. (code -27) [✓] Network resources • All expected network resources are available.
针对这个问题的解决建议
1. 排查R8混淆导致的类/方法被误删
Flutter 3.35.x可能调整了与Android构建工具的交互逻辑,Release模式下R8混淆可能误将某些Flutter引擎依赖的类或方法标记为无用并删除,导致空指针。你可以尝试:
- 在
android/app/proguard-rules.pro中添加Flutter核心类的保留规则:-keep class io.flutter.** { *; } -keep class androidx.lifecycle.** { *; } -keep class com.google.firebase.** { *; } - 临时关闭R8混淆测试(在
android/app/build.gradle中设置minifyEnabled false),如果崩溃消失,就说明是混淆规则的问题,需要进一步细化规则。
2. 检查Firebase相关依赖的兼容性
你使用了Google Services和Firebase Crashlytics,Flutter 3.35.0可能对Firebase的集成方式有要求,尝试:
- 确保
google-services.json正确放置在android/app目录下,并且与你的包名完全匹配 - 暂时注释掉Firebase相关的初始化代码(如果是手动初始化的话),测试Release构建是否还崩溃,逐步定位是否是Firebase集成的问题
3. 降级Kotlin或Android Gradle Plugin版本
你升级到了Kotlin 2.0.0和AGP 8.6.0,这两个版本比较新,可能和Flutter 3.35.0存在兼容性问题:
- 尝试将Kotlin版本降回
1.9.24,AGP版本降回8.5.1,重新同步Gradle并构建Release版本 - 同时确保Gradle wrapper版本与AGP版本匹配(AGP 8.5.x对应Gradle 8.7,你当前用的是8.9,可能存在不兼容)
4. 尝试Flutter 3.35.x的最新补丁版本
你当前用的是3.35.4,检查是否有更新的补丁版本(比如3.35.5+),Flutter团队可能已经修复了这个启动崩溃的bug,执行flutter upgrade升级到最新稳定版再测试。
5. 检查Flutter插件的兼容性
有些第三方Flutter插件可能还没适配Flutter 3.35.x,尤其是涉及Android原生交互的插件:
- 列出所有依赖的插件(
flutter pub list),检查每个插件的最新版本是否标注了支持Flutter 3.35+ - 暂时移除非必要的插件,逐个添加测试,定位是否是某个插件导致的冲突
如果以上方法都没解决,你可以尝试在Flutter官方仓库搜索类似的Issue,或者提交包含完整复现步骤的Issue,附上你的pubspec.yaml和Android构建配置文件,方便官方排查。




