Android 12设备安装Flutter正式版APK提示解析包错误如何解决?
问题根因
你遇到的Parse Error : There was a problem parsing the package报错,是Android 12(API 31)的系统限制导致的:所有包含<intent-filter>的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)必须显式声明android:exported属性,而Flutter 2.5.3版本的默认Android构建配置没有针对API 31做适配,所以release构建时会生成不符合Android 12要求的APK,安装时触发解析错误。
修复步骤
- 第一步:修改Android模块的build.gradle配置
打开android/app/build.gradle文件,将compileSdkVersion和targetSdkVersion统一修改为31或者更高版本:android { compileSdkVersion 31 // 原数值如果是30或更低,修改为31及以上 defaultConfig { targetSdkVersion 31 // 同步修改为31及以上 } } - 第二步:显式声明AndroidManifest的exported属性
打开android/app/src/main/AndroidManifest.xml文件,找到所有包含<intent-filter>标签的组件,给每个组件添加android:exported属性:- 如果组件需要响应外部应用跳转、系统广播等外部调用,设置为
android:exported="true" - 如果组件仅应用内部调用,设置为
android:exported="false"
以主Activity为例,修改后配置参考:
<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:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> - 如果组件需要响应外部应用跳转、系统广播等外部调用,设置为
- 第三步:清理缓存重新构建release包
执行以下命令清理旧构建产物,重新生成APK即可:flutter clean flutter build apk --release
额外排查项
如果修改后仍有报错,可以依次检查以下内容:
- 检查引入的第三方Flutter插件是否也存在未声明exported属性的组件,如果有,需要给对应插件的AndroidManifest也添加属性,或者升级插件到适配Android 12的版本
- 确认APK签名配置正确,Android 12要求应用必须使用v2及以上签名方案,检查
android/app/build.gradle中的签名配置是否符合要求 - 确认Pixel设备的未知来源应用安装权限已经开启,且APK文件在传输过程中没有损坏
内容的提问来源于stack exchange,提问作者AVEbrahimi
相关产品推荐
相关产品推荐

