Flutter应用适配Android 12报错:需指定android:exported属性
解决Flutter Android 12适配Manifest合并失败问题
问题根源
Android 12及更高版本强制要求所有<activity>、<service>、<receiver>组件必须显式声明android:exported属性(取值true或false),而Flutter debug环境依赖的androidx.test.core测试库中,EmptyActivity和EmptyFloatingActivity两个默认组件未配置该属性,直接触发Manifest合并失败,导致assembleDebug任务执行中断。
可行解决方法
方法1:在主Manifest中覆盖声明组件
打开项目的android/app/src/main/AndroidManifest.xml,添加以下代码显式指定两个测试Activity的android:exported属性:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package.name"> <!-- 替换为你的项目包名 --> <!-- 原有代码保留 --> <!-- 覆盖测试库的EmptyActivity --> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity" android:exported="false" /> <!-- 覆盖测试库的EmptyFloatingActivity --> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity" android:exported="false" /> </manifest>
方法2:升级测试依赖库版本
androidx.test.core的1.5.0及以上版本已修复该问题,自动为组件添加android:exported属性。打开android/build.gradle文件,更新依赖版本:
dependencies { // 其他依赖项保留 androidTestImplementation 'androidx.test:core:1.5.0' }
方法3:临时降级编译SDK(不推荐)
若仅需临时调试,可将编译SDK版本降至Android 11(API 30),绕过Android 12的强制检查。修改android/app/build.gradle:
android { compileSdkVersion 30 // 从31+改为30 defaultConfig { targetSdkVersion 30 // 其他配置保留 } }
验证修复
执行以下命令清理并重新构建项目,确认报错消除:
flutter clean flutter run
内容的提问来源于stack exchange,提问作者Dasun Dola
相关产品推荐
相关产品推荐

