You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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构建配置文件,方便官方排查。

火山引擎 最新活动