Flutter应用Android12安装失败:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
问题排查与解决方案
Android 12(API 31)对Manifest的校验逻辑远严于旧版本,除了Activity,所有带intent-filter的组件(Service、BroadcastReceiver、ContentProvider)都必须显式声明android:exported属性,仅处理Activity的设置不足以覆盖所有场景。以下是针对性排查步骤:
1. 全面校验Manifest中带intent-filter的组件
打开AndroidManifest.xml,逐一检查以下组件:
- 所有
<activity>(包括Flutter插件自动引入的第三方组件) - 所有
<service> - 所有
<receiver> - 所有
<provider>
只要组件包含<intent-filter>标签,必须明确添加android:exported="true"或android:exported="false",不能留空。示例:
<receiver android:name=".BootReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
2. 确认targetSdkVersion达标
Android 12要求应用targetSdkVersion至少为31,打开android/app/build.gradle检查:
android { defaultConfig { targetSdkVersion 31 // 必须≥31,建议直接设置为最新兼容版本 } }
3. 排查Manifest合并冲突
部分旧版Flutter插件的Manifest未适配Android 12,会与主Manifest产生合并冲突。可通过以下方式查看最终生效的Manifest:
- 使用Android Studio的
Build > Analyze APK功能,选择打包后的APK,在Manifest标签页查看完整合并内容,定位未声明android:exported的组件 - 终端执行
flutter build apk --debug,解压build/app/outputs/apk/debug/app-debug.apk,解码查看内部的AndroidManifest.xml(可使用AXMLPrinter2工具)
4. 检查Manifest非法内容
- 组件的
android:name属性不能存在拼写错误或特殊字符 - 确认权限声明符合Android 12要求,例如
POST_NOTIFICATIONS需显式声明 - 排查是否存在重复的组件定义
5. 更新依赖库版本
确保Flutter SDK及所有插件为最新版本,旧版插件大概率未适配Android 12的Manifest规则。执行命令更新:
flutter pub upgrade
重点检查与系统交互类插件(推送、定位、分享等)的版本。
若以上步骤仍无法解决,可提供合并后的完整Manifest内容及错误日志中的具体行号,以便精准定位问题。
内容的提问来源于stack exchange,提问作者AbdulHaseeeb
相关产品推荐
相关产品推荐

