Flutter构建App Bundle时AndroidManifest被覆盖报错解决方案
Flutter App Bundle构建Manifest覆写重复label问题修复方案
问题表现
构建App Bundle release包时,构建流程自动修改主AndroidManifest.xml,重复写入android:label(应用名称)字段,触发构建失败,无法生成可上传Google Play Console的AAB包。
根因定位
- 主
AndroidManifest.xml存在大量冗余硬编码内容:手动写入了所有Firebase、Google Play服务相关的service、activity、provider组件,这些组件本应由对应依赖插件在构建时通过manifest合并机制自动注入,手动硬编码会导致合并时属性重复。 - 主manifest错误声明了已由Gradle接管的配置:硬写了
android:versionCode、android:versionName、<uses-sdk>标签,和build.gradle中的配置重复,干扰合并流程。 app/build.gradle存在重复配置:defaultConfig块中重复定义了两次versionCode、versionName;同时注释掉了com.google.gms.google-services插件,导致Firebase配置注入逻辑异常,重复写入application属性。
修复步骤
- 第一步:精简主AndroidManifest配置
打开android/app/src/main/AndroidManifest.xml,删除所有冗余的自动生成组件、重复配置,仅保留核心自定义内容,参考配置如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.svapps.geografiebac.bacgeografie"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID" /> <application android:name="com.svapps.geografiebac.bacgeografie.10BacGeografie.10BacGeografie" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_launcher" android:label="bacgeografie" tools:replace="android:label"> <activity android:name="com.svapps.geografiebac.bacgeografie.10BacGeografie.MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:exported="true" android:hardwareAccelerated="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:windowSoftInputMode="adjustResize" > <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
注:
tools:replace="android:label"属性会强制manifest合并时使用主文件中定义的应用名称,避免其他依赖注入的label值产生冲突。
- 第二步:修正app层级build.gradle配置
打开android/app/build.gradle,首先修复defaultConfig块的重复配置,删除硬编码的versionCode、versionName,修正后块内容如下:
defaultConfig { applicationId "com.svapps.geografiebac.bacgeografie" minSdkVersion 19 targetSdkVersion 30 multiDexEnabled true versionCode flutterVersionCode.toInteger() versionName flutterVersionName }
取消google-services插件的注释,恢复Firebase正常注入逻辑:
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
确认项目根目录下的build.gradle文件中,dependencies块已引入匹配版本的google-services classpath(和当前使用的Firebase BOM 29.0.4适配的版本为4.3.10即可)。
- 第三步:清理缓存重新构建
依次执行以下命令清理旧构建缓存,重新拉取依赖并打包AAB:
flutter clean cd android && ./gradlew clean cd .. flutter pub get flutter build appbundle --release
额外排查点
如果执行上述步骤后仍出现重复字段报错:
- 打开构建生成的合并manifest文件,路径为
android/app/build/intermediates/merged_manifests/release/AndroidManifest.xml,搜索重复的android:label字段,定位冲突来源。 - 检查
android/app/src/debug、android/app/src/profile目录下是否存在其他AndroidManifest文件,确认这些文件中没有重复定义application标签的label属性。 - 检查Flutter项目中是否引入了会自动修改manifest的第三方构建脚本,暂时禁用这类脚本后重试构建。
内容的提问来源于stack exchange,提问作者Lili
相关产品推荐
相关产品推荐

