Android Manifest合并失败:项目minSdk23低于依赖库要求的28
问题背景
开发笔记应用的相册选图展示功能时,遭遇Manifest合并失败。项目minSdkVersion=23,但依赖库com.android.car.ui:car-ui-lib:2.2.1要求最低SDK版本为28,且代码中已做SDK版本判断,但无法解决Manifest层面的合并错误。
错误信息示例
Manifest合并失败提示
Manifest merger failed : uses-sdk:minSdkVersion 23 cannot be smaller than version 28 declared in library [com.android.car.ui:car-ui-lib:2.2.1] /app/build/intermediates/merged_manifest/debug/AndroidManifest.xml as the library might be using APIs not available in 23
Suggestion: use a compatible library with a minSdk of at most 23,
or increase this project's minSdk version to at least 28,
or use tools:overrideLibrary="com.android.car.ui" to force usage (may lead to runtime failures)
解决方案
方案1:使用tools:overrideLibrary强制合并Manifest
这是最直接的临时解决方案,允许项目忽略依赖库的minSdk限制,但必须做好运行时兼容判断。
在项目根AndroidManifest.xml的<manifest>标签中添加tools:overrideLibrary属性:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.your.note.app"> <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="33" tools:overrideLibrary="com.android.car.ui"/> <!-- 其他Manifest内容 --> </manifest>
注意:必须确保所有调用car-ui-lib的代码都添加SDK版本判断,避免在Android 7.0(API23)及以下版本触发崩溃:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // 仅在API28+环境下调用car-ui-lib相关逻辑 // 例如相册选图的UI处理 } else { // 低版本兼容方案:使用原生Android组件实现相同功能 }
方案2:替换为更低版本的car-ui-lib
查找car-ui-lib的历史版本,选择minSdkVersion<=23的版本替换当前依赖。例如早期1.x版本通常支持更低的SDK:
// 在app/build.gradle中修改依赖 implementation 'com.android.car.ui:car-ui-lib:1.2.0'
替换后需全面测试相册选图功能,确认低版本库的特性满足需求。
方案3:排除间接依赖的car-ui-lib
如果car-ui-lib是通过其他第三方库间接引入的(而非你主动添加),可以在依赖声明中排除它,然后自行实现相关功能:
// 示例:排除某依赖库中的car-ui-lib implementation 'com.some.thirdparty:photo-picker:2.0.0' { exclude group: 'com.android.car.ui', module: 'car-ui-lib' }
此方案适合你不需要car-ui-lib功能的场景,需用原生组件或其他轻量库替代其作用。
内容的提问来源于stack exchange,提问作者Ahmet Kaan

