Flutter应用在Google Play无法安装至Android12设备问题排查
问题现象
- 在Google Play Console发起Flutter应用内部测试时,搭载Android 12系统的真机无法安装应用,其余设备均可正常安装;但该应用在Android 12模拟器上运行无异常。
- 按照对应问题指引操作后问题仍未解决,新建无任何修改的纯净Flutter项目直接上传测试,结果完全一致:除Android 12真机外,其余所有设备均可正常下载安装。

现有配置
app层级build.gradle配置
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 31 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { applicationId "myAppId" minSdkVersion 21 targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" }
Flutter doctor运行结果

解决方案
问题根因是未配置Android 12强制要求的组件exported属性:targetSdkVersion 31及以上的应用,所有带intent-filter的组件(Activity、Service、BroadcastReceiver等)必须显式声明android:exported属性,否则应用在Android 12真机上会被系统拦截安装,模拟器不会触发该校验所以能正常运行。
按以下步骤修复:
- 打开项目路径下的
android/app/src/main/AndroidManifest.xml文件 - 找到所有配置了
<intent-filter>的组件标签,补充android:exported属性:- 应用启动页、需要被外部应用唤起的组件设置为
android:exported="true" - 不需要对外暴露的内部组件设置为
android:exported="false"
- 应用启动页、需要被外部应用唤起的组件设置为
- 如果项目依赖了第三方Flutter插件,部分老版本插件未适配该规则,可先将manifest根标签补充命名空间声明
xmlns:tools="http://schemas.android.com/tools",在application节点下通过tools:replace属性覆盖三方库的组件配置,或者直接将所有依赖插件升级到最新版本,主流插件基本都已完成Android 12适配。 - 修改完成后重新打包,上传新的构建版本到Google Play Console发布测试即可。
注意:3.0版本之前的Flutter创建的纯净项目,自带的AndroidManifest.xml模板默认没有添加
exported属性,同样会触发该问题,手动补全配置即可。
内容的提问来源于stack exchange,提问作者Nero
相关产品推荐
相关产品推荐

