M1 Mac运行Flutter安卓应用报INSTALL_PARSE_FAILED_MANIFEST_MALFORMED求助
报错根因
你触发的是Android 12(API level 31及以上)的系统强制校验规则:所有包含<intent-filter>的组件(Activity、Service、BroadcastReceiver、Content Provider)必须显式声明android:exported属性,标明该组件是否允许其他应用调用,未声明的应用会直接在安装时解析Manifest失败。
你提供的Manifest文件里,MainActivity节点配置了2个<intent-filter>,但没有添加android:exported属性,因此触发了该报错。
解决方案
- 第一步:修改
android/app/src/main/AndroidManifest.xml中的MainActivity配置,添加android:exported="true"属性。由于你的MainActivity包含启动器的intent-filter,需要允许桌面启动器唤起应用,所以属性值必须设为true,修改后的节点参考如下:
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> <!-- 原有meta-data、intent-filter等配置保持不变即可 --> </activity>
- 第二步:排查其他组件的配置
如果你的项目里自己定义了带<intent-filter>的Service、BroadcastReceiver组件,也需要对应添加android:exported属性:不需要对外暴露的组件设为false,需要对外暴露的组件设为true。
如果修改后仍报错,大概率是依赖的第三方插件未适配Android 12,可到android/app/build/intermediates/merged_manifest目录下找到合并后的最终Manifest文件,定位报错行对应的组件,将所属插件升级到适配Android 12的版本即可。 - 第三步:清理缓存重新运行
执行以下命令清理旧的构建缓存,再重新启动项目即可:
flutter clean flutter pub get
内容的提问来源于stack exchange,提问作者Gajanan Shinde
相关产品推荐
相关产品推荐

