You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用在Google Play无法安装至Android12设备问题排查

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

Flutter doctor运行截图

解决方案

问题根因是未配置Android 12强制要求的组件exported属性:targetSdkVersion 31及以上的应用,所有带intent-filter的组件(Activity、Service、BroadcastReceiver等)必须显式声明android:exported属性,否则应用在Android 12真机上会被系统拦截安装,模拟器不会触发该校验所以能正常运行。
按以下步骤修复:

  1. 打开项目路径下的android/app/src/main/AndroidManifest.xml文件
  2. 找到所有配置了<intent-filter>的组件标签,补充android:exported属性:
    • 应用启动页、需要被外部应用唤起的组件设置为android:exported="true"
    • 不需要对外暴露的内部组件设置为android:exported="false"
  3. 如果项目依赖了第三方Flutter插件,部分老版本插件未适配该规则,可先将manifest根标签补充命名空间声明xmlns:tools="http://schemas.android.com/tools",在application节点下通过tools:replace属性覆盖三方库的组件配置,或者直接将所有依赖插件升级到最新版本,主流插件基本都已完成Android 12适配。
  4. 修改完成后重新打包,上传新的构建版本到Google Play Console发布测试即可。

注意:3.0版本之前的Flutter创建的纯净项目,自带的AndroidManifest.xml模板默认没有添加exported属性,同样会触发该问题,手动补全配置即可。

内容的提问来源于stack exchange,提问作者Nero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:48:11