运行Flutter Android应用提示Manifest merger failed with multiple errors怎么解决?
问题根因定位
- 核心问题是应用级build.gradle中未正确配置
manifestPlaceholders参数,导致主目录AndroidManifest.xml中的${applicationName}占位符无法被正常替换 - 额外可能的触发原因:
- Flutter版本升级后默认生成的AndroidManifest模板与旧版build.gradle配置不兼容
- debug目录的AndroidManifest.xml存在冗余
application属性配置,和主Manifest冲突 - 第三方依赖包引入的Manifest配置与主配置存在字段冲突
解决方案
步骤1:补全应用级build.gradle的manifestPlaceholders配置
打开android/app/build.gradle文件,找到defaultConfig代码块,添加applicationName对应的占位符配置:
android { namespace "你的应用包名" compileSdkVersion flutter.compileSdkVersion defaultConfig { applicationId "你的应用ID" minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName // 新增下面这行配置 manifestPlaceholders = [applicationName: "android.app.Application"] // 如果你有自定义的Application类,替换成你自己的类全路径即可,比如: // manifestPlaceholders = [applicationName: "com.example.myapp.MyApplication"] } }
无自定义Application逻辑的项目直接填
android.app.Application即可,是Android系统默认的Application实现类。
步骤2:校验debug目录Manifest配置
打开android/app/src/debug/AndroidManifest.xml,仅保留debug环境专属的权限和配置,删除和主Manifest重复的android:name等application节点属性,debug目录Manifest常规正确配置示例:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="你的应用包名"> <!-- 仅保留debug环境需要的额外权限 --> <uses-permission android:name="android.permission.INTERNET" /> <application android:usesCleartextTraffic="true" /> </manifest>
步骤3:清理缓存重新构建
依次执行以下命令清理旧构建缓存后重新运行项目:
flutter clean flutter pub get cd android gradlew clean cd .. flutter run
兼容兜底方案
如果上述方法仍未解决,可直接替换主Manifest中的占位符为实际值:
打开android/app/src/main/AndroidManifest.xml,找到application节点的android:name属性,将${applicationName}直接替换为实际的Application类全路径即可。
内容的提问来源于stack exchange,提问作者EggBender
相关产品推荐
相关产品推荐

