Flutter设置compileSdk为30/31时AAR报错与android:exported配置问题
问题成因
1. compileSdk设置为30时AAR元数据校验失败
你项目引入的androidx.appcompat:1.4.0、androidx.core:1.7.0、androidx.lifecycle:2.4.0这类官方依赖包,本身最低要求compileSdk必须为31,你设置的compileSdk=30低于依赖要求的最低版本,触发AAR元数据校验规则,直接报错。
2. compileSdk切换为31时android:exported配置报错
虽然你自己声明的MainActivity已经添加了android:exported="true"属性,但该报错通常是项目引入的第三方Flutter插件自带的组件(Activity、Service、BroadcastReceiver)未配置android:exported属性导致。Android 12(对应API 31)强制要求所有带intent-filter的四大组件必须显式声明exported属性,规则覆盖所有直接和间接引入的组件。
解决方案
方案一:继续使用compileSdk=30(无需适配Android 12特性时选择)
在项目android/app/build.gradle文件的dependencies代码块上方添加强制指定低版本依赖的配置,覆盖默认引入的高版本依赖:
configurations.all { resolutionStrategy { force 'androidx.appcompat:appcompat:1.3.1' force 'androidx.appcompat:appcompat-resources:1.3.1' force 'androidx.core:core:1.6.0' force 'androidx.lifecycle:lifecycle-process:2.3.1' force 'androidx.lifecycle:lifecycle-runtime:2.3.1' force 'androidx.emoji2:emoji2:1.0.0-alpha03' force 'androidx.emoji2:emoji2-views-helper:1.0.0-alpha03' } }
上述版本的依赖最低要求compileSdk均为30,配置完成后执行flutter clean,再重新构建即可解决报错。
方案二:使用compileSdk=31(需要适配Android 12及以上版本时选择)
- 先确认
android/app/build.gradle中基础配置符合要求:
android { compileSdkVersion 31 defaultConfig { targetSdkVersion 31 // 其余原有配置保持不变 } }
- 解决第三方组件未声明exported的问题:
- 优先升级项目所有依赖的Flutter插件到最新正式版,大部分主流插件已经完成Android 12适配,自带组件均已添加exported属性,升级后即可直接解决报错。
- 若升级插件后仍有报错,在项目android目录下执行命令定位缺失属性的组件:
Windows系统执行:gradlew app:processDebugManifest
Mac/Linux系统执行:./gradlew app:processDebugManifest
命令执行后会输出具体缺少exported属性的组件完整类名,在你自己项目的AndroidManifest.xml中添加对应组件的声明,显式设置android:exported属性并添加合并规则即可覆盖第三方插件的配置,示例如下:<receiver android:name="第三方组件完整类名" android:exported="false" tools:node="merge" />
内容的提问来源于stack exchange,提问作者Adnan haider
相关产品推荐
相关产品推荐

