集成Firebase后遭遇Manifest合并失败:minSdkVersion 14低于依赖库要求
刚搞定Firebase集成就碰到这个坑太正常了,我来给你拆解一下问题和解决办法:
首先看你遇到的错误提示:
Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 16 declared in library [com.google.firebase:firebase-inappmessaging-display:17.0.4] C:\Users\smsst.gradle\caches\transforms-2\files-2.1\52cd5080d63c0547cae05690267d3335\AndroidManifest.xml
错误原因
你的项目设置的最低兼容Android版本(minSdkVersion)是14,但你引入的firebase-inappmessaging-display:17.0.4库要求最低兼容版本是16。这个库用到了Android 4.1(API 16)才有的API,在更低版本的系统上根本跑不起来,所以Manifest合并工具直接报错阻止你继续。
下面是三种可行的解决办法,按推荐程度排序:
方法一:升级项目的minSdkVersion到16(最推荐)
这是最稳妥的方案,毕竟API 14对应的Android 4.0已经是非常老旧的版本了,现在市面上几乎没有还在使用这个版本的设备。操作步骤很简单:
- 打开你项目里Module级别的
build.gradle文件(不是Project根目录下的那个) - 在
defaultConfig块里修改minSdkVersion的值:
android { defaultConfig { minSdkVersion 16 // 把原来的14改成16 targetSdkVersion 你的目标版本号 // 其他配置... } }
- 点击Android Studio右上角的「Sync Now」同步Gradle,问题就能解决。这样做还能避免后续其他库的兼容问题。
方法二:改用支持minSdkVersion 14的旧版Firebase库
如果你因为特殊需求必须兼容API 14,可以去找Firebase In-App Messaging Display库的旧版本,看看有没有支持minSdk 14的。不过要注意,旧版本可能缺少新功能,而且官方大概率已经停止维护,存在安全隐患。
你只需要在build.gradle的依赖块里指定旧版本号即可:
dependencies { // 替换成支持minSdk 14的版本号,需要自行查阅Firebase版本历史确认 implementation 'com.google.firebase:firebase-inappmessaging-display:XXX' }
方法三:强制覆盖库的minSdk要求(不推荐,风险高)
如果你实在不想改项目的minSdk,也不想换库版本,可以用tools:overrideLibrary强制Manifest合并,但这个方法会跳过版本检查,导致App在API 14的设备上运行时大概率崩溃(因为库用到的API不存在),只适合临时测试用。
操作步骤:
- 在你的项目
AndroidManifest.xml的根manifest标签里添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名">
- 在
uses-sdk标签里添加tools:overrideLibrary属性,指定要覆盖的库:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="你的目标版本号" tools:overrideLibrary="com.google.firebase.inappmessaging.display"/>
内容的提问来源于stack exchange,提问作者Hassan AL-Dagham

