Android集成Firebase动态链接触发NoSuchFieldError崩溃如何解决
崩溃根因
这个报错和你写的深度链接获取逻辑、Manifest里的intent-filter配置没有关系,纯粹是依赖版本不匹配导致的:
- 你项目中引入的Firebase Dynamic Links SDK版本,要求依赖的GMS公共基础库
com.google.android.gms:play-services-base必须是包含Api.ApiOptions.NO_OPTIONS静态字段的较高版本 - 实际构建打包时,最终合并进APK的
play-services-base版本过低,要么是手动指定Firebase各组件版本时没对齐兼容关系,要么是项目里其他三方依赖强制拉取了低版本GMS库,导致运行时Dynamic Links初始化时找不到对应字段直接崩溃。
修复方案
按以下顺序操作即可解决:
- 第一步:用Firebase官方BOM统一管理依赖版本,从根源避免版本不匹配
打开app模块下的build.gradle文件,在dependencies闭包中引入Firebase BOM,之后所有Firebase相关依赖都不需要手动指定版本号,由BOM自动匹配互相兼容的版本:dependencies { // 引入Firebase BOM,统一管控所有Firebase、关联GMS依赖的兼容版本 implementation platform('com.google.firebase:firebase-bom:32.7.0') // 动态链接依赖,无需指定版本号 implementation 'com.google.firebase:firebase-dynamic-links' // 项目中其他Firebase组件(比如埋点、认证、云消息等)同样不需要写版本号 } - 第二步:排查并强制对齐GMS基础库版本
如果改完BOM还是报错,在Android Studio终端执行依赖查询命令:
在输出的依赖树里搜索// Mac/Linux系统 ./gradlew app:dependencies // Windows系统 gradlew app:dependenciesplay-services-base,确认最终打包的版本号,如果低于18.1.0,就在build.gradle里加全局强制版本配置,覆盖低版本依赖:configurations.all { resolutionStrategy.force 'com.google.android.gms:play-services-base:18.3.0' } - 第三步:清理缓存重新构建
点击Android Studio菜单栏的Build > Clean Project,等清理完成后再点Build > Rebuild Project,不要用之前的增量构建缓存包,重新安装APK即可。
修复完成后你原来写的
fetchDeeplink逻辑、Manifest的intent-filter配置不需要做任何修改,就能正常初始化并获取深度链接。
内容的提问来源于stack exchange,提问作者rupesh
相关产品推荐
相关产品推荐

