Android集成Flutter模块遇Manifest合并失败,不改minSdk如何解决?
解决多Flutter依赖导致的Android Manifest合并minSdk冲突问题
问题场景
现有Android(Java)项目集成Flutter模块,运行时出现Manifest合并错误,且多个Flutter依赖包均报此类错误,不想修改主Android项目的minSdkVersion(当前为19)。
错误示例:
Manifest merger failed : uses-sdk:minSdkVersion 19 cannot be smaller than version 21 declared in library [:payu_checkoutpro_flutter] ~/pm_module/.android/plugins_build_output/payu_checkoutpro_flutter/intermediates/merged_manifest/debug/AndroidManifest.xml as the library might be using APIs not available in 19 Suggestion: use a compatible library with a minSdk of at most 19, or increase this project's minSdk version to at least 21, or use tools:overrideLibrary="com.payubiz.payu_checkoutpro_flutter" to force usage (may lead to runtime failures)
项目结构:
--Android_A --- 主Android源码 --Flutter_B --- 主Flutter代码 --Flutter_C --- Flutter Git子模块
Flutter依赖声明:
- Flutter_C/pubspec.yaml:
Flutter_B: path: ../../Flutter_B
- Flutter_B/pubspec.yaml:
Flutter_C: path: Flutter_C
Android_A/settings.gradle配置:
include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, 'Flutter_B/.android/include_flutter.groovy' ))
已尝试git reset、flutter clean、flutter pub get等操作,问题未解决。
解决方案
1. 批量添加tools:overrideLibrary强制合并
在主Android项目的Android_A/app/src/main/AndroidManifest.xml中,通过tools:overrideLibrary批量指定所有冲突的依赖包,强制Manifest合并:
- 首先在
<manifest>标签中添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.your.package.name">
- 在
<uses-sdk>标签中添加多个冲突包的包名,用逗号分隔:
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" tools:overrideLibrary="com.payubiz.payu_checkoutpro_flutter, com.example.otherconflictpackage1, com.example.otherconflictpackage2"/>
注意:此方法可能导致运行时崩溃(若依赖包使用了minSdk19不支持的API),需在Android 4.4(API19)设备上全面测试功能。
2. 通过Gradle统一覆盖所有子模块的minSdkVersion
在主Android项目的根build.gradle(或Android_A/app/build.gradle)中添加配置,强制所有子模块(包括Flutter插件)使用指定的minSdkVersion:
subprojects { afterEvaluate { project -> if (project.hasProperty('android')) { android { defaultConfig { minSdkVersion 19 } } } } }
该配置会遍历所有子项目,将它们的minSdkVersion统一设置为19,避免逐个修改依赖的manifest。同样需注意测试低版本设备的兼容性。
3. 回退依赖版本至兼容状态
由于之前配置可正常运行,推测是依赖包版本更新导致minSdk要求提升。可通过以下步骤回退:
- 查看
Flutter_B/pubspec.lock文件,找到之前能正常运行的依赖版本号; - 在
Flutter_B/pubspec.yaml中指定依赖的具体版本(而非使用默认的最新版本),例如:
dependencies: payu_checkoutpro_flutter: ^x.y.z # 替换为之前兼容的版本号
- 执行
flutter pub get更新依赖。
内容的提问来源于stack exchange,提问作者Kishor Pawar
相关产品推荐
相关产品推荐

