You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用Android启动崩溃 Firebase NoSuchMethodError报错排查

Flutter Android端启动即崩溃:Firebase Messaging初始化报NoSuchMethodError

问题定位

从崩溃堆栈可以直接定位根因:Firebase原生SDK版本冲突。
堆栈中明确显示firebase-messaging@@20.3.0初始化时,调用com.google.firebase.iid.GmsRpc的构造方法失败,当前APK中打包的firebase-iid组件版本过低,缺少对应入参的构造方法,抛出java.lang.NoSuchMethodError。
这类问题基本都是以下原因导致的:

  • 手动在安卓构建配置中写死Firebase各组件版本,版本号之间不兼容
  • 项目引入的其他Flutter/原生插件传递依赖了不同版本的Firebase SDK,Gradle依赖解析时拉取了不匹配的版本组合
  • 构建缓存残留,旧版本依赖没有被正确替换

修复方案

按以下顺序操作即可解决:

  • 第一步:移除手动指定的Firebase SDK固定版本号
    打开android/app/build.gradle,检查dependencies块,如果有类似implementation 'com.google.firebase:firebase-messaging:20.3.0'这种单独写死版本的Firebase依赖,优先删掉版本号,改用Firebase官方推荐的BoM方式统一管理版本:
    dependencies {
        // 引入Firebase BoM,仅需指定BoM版本,所有Firebase组件版本自动对齐
        implementation platform('com.google.firebase:firebase-bom:32.7.0')
        // 所有Firebase组件不需要再写版本号
        implementation 'com.google.firebase:firebase-messaging'
    }
    
    如果你是通过Flutter官方的firebase_messaging插件接入推送,直接把pubspec.yaml中对应插件升级到最新稳定版本即可,插件会自动绑定兼容的原生SDK版本,不要手动在原生配置中锁死Firebase SDK版本。
  • 第二步:排查传递依赖冲突
    执行命令打印安卓依赖树,定位冲突的依赖来源:
    cd android
    ./gradlew app:dependencies
    
    在输出结果中搜索firebase-iid,如果存在多个版本被引入的情况,可以通过resolutionStrategy强制对齐版本:
    // 在android/app/build.gradle的android块同级添加
    configurations.all {
        resolutionStrategy {
            // 强制指定和firebase-messaging匹配的firebase-iid版本,使用BoM时不需要加这段
            force 'com.google.firebase:firebase-iid:20.3.0'
        }
    }
    
  • 第三步:清理缓存重新构建
    执行以下命令清理所有构建缓存,避免旧包残留:
    flutter clean
    cd android && ./gradlew clean
    cd ..
    flutter pub get
    flutter run
    

崩溃堆栈参考

√  Built build\app\outputs\flutter-apk\app-debug.apk.
E/AndroidRuntime(31208): FATAL EXCEPTION: main
E/AndroidRuntime(31208): Process: com.a2meeamanora.parentsapp, PID: 31208
E/AndroidRuntime(31208): java.lang.NoSuchMethodError: No direct method <init>(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/iid/Metadata;Lcom/google/firebase/platforminfo/UserAgentPublisher;Lcom/google/firebase/heartbeatinfo/HeartBeatInfo;Lcom/google/firebase/installations/FirebaseInstallationsApi;)V in class Lcom/google/firebase/iid/GmsRpc; or its super classes (declaration of 'com.google.firebase.iid.GmsRpc' appears in /data/app/com.a2meeamanora.parentsapp-QBK-qAIbuN0wwRvjbwIR2A==/base.apk!classes2.dex)
E/AndroidRuntime(31208):    at com.google.firebase.messaging.TopicsSubscriber.createInstance(com.google.firebase:firebase-messaging@@20.3.0:1)
E/AndroidRuntime(31208):    at com.google.firebase.messaging.FirebaseMessaging.<init>(com.google.firebase:firebase-messaging@@20.3.0:12)
E/AndroidRuntime(31208):    at com.google.firebase.messaging.FirebaseMessagingRegistrar.lambda$getComponents$0$FirebaseMessagingRegistrar(com.google.firebase:firebase-messaging@@20.3.0:25)
E/AndroidRuntime(31208):    at com.google.firebase.messaging.FirebaseMessagingRegistrar$$Lambda$0.create(Unknown Source:0)
E/AndroidRuntime(31208):    at com.google.firebase.components.ComponentRuntime.lambda$discoverComponents$0(ComponentRuntime.java:132)
E/AndroidRuntime(31208):    at com.google.firebase.components.ComponentRuntime$$Lambda$1.get(Unknown Source:4)
E/AndroidRuntime(31208):    at com.google.firebase.components.Lazy.get(Lazy.java:53)
E/AndroidRuntime(31208):    at com.google.firebase.components.ComponentRuntime.doInitializeEagerComponents(ComponentRuntime.java:291)
E/AndroidRuntime(31208):    at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(ComponentRuntime.java:281)
E/AndroidRuntime(31208):    at com.google.firebase.FirebaseApp.initializeAllApis(FirebaseApp.java:584)
E/AndroidRuntime(31208):    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:303)
E/AndroidRuntime(31208):    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:267)
E/AndroidRuntime(31208):    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:252)
E/AndroidRuntime(31208):    at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:51)
E/AndroidRuntime(31208):    at android.content.ContentProvider.attachInfo(ContentProvider.java:2064)
E/AndroidRuntime(31208):    at android.content.ContentProvider.attachInfo(ContentProvider.java:2039)
E/AndroidRuntime(31208):    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:45)
E/AndroidRuntime(31208):    at android.app.ActivityThread.installProvider(ActivityThread.java:6487)
E/AndroidRuntime(31208):    at android.app.ActivityThread.installContentProviders(ActivityThread.java:6039)
E/AndroidRuntime(31208):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5951)
E/AndroidRuntime(31208):    at android.app.ActivityThread.-wrap1(Unknown Source:0)
E/AndroidRuntime(31208):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1774)
E/AndroidRuntime(31208):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(31208):    at android.os.Looper.loop(Looper.java:192)
E/AndroidRuntime(31208):    at android.app.ActivityThread.main(ActivityThread.java:6759)
E/AndroidRuntime(31208):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(31208):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
E/AndroidRuntime(31208):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:875)

内容的提问来源于stack exchange,提问作者Khushwant Pratap yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:06:25