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

Flutter 3.22.3:无法从FlutterExtension获取versionCode的解决方法

解决Flutter 3.22.3中Android构建时versionCode/versionName无法从FlutterExtension获取的问题

在Flutter 3.22.3版本构建Android应用时,会出现Could not get unknown property 'versionCode' for extension 'flutter' of type FlutterExtension错误,原因是该版本的FlutterExtension未暴露versionCode和versionName属性。以下是无需手动硬编码、同时保持多平台版本一致的解决方案:

方案1:从local.properties读取版本信息

Flutter会自动将pubspec.yaml中的版本同步到项目根目录的local.properties文件中,可直接从该文件读取:

  1. 在android/app/build.gradle文件开头添加读取逻辑:
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}
  1. 修改defaultConfig中的版本配置:
defaultConfig {
    applicationId = "com.example.flutter_application_1"
    minSdk = flutter.minSdkVersion
    targetSdk = flutter.targetSdkVersion
    versionCode = localProperties.getProperty('flutter.versionCode') as int
    versionName = localProperties.getProperty('flutter.versionName')
}

方案2:直接解析pubspec.yaml文件

如果不想依赖local.properties,可以直接解析项目根目录的pubspec.yaml文件提取版本信息(要求版本格式为x.y.z+buildNumber,如1.0.0+1):

  1. 在android/app/build.gradle文件开头添加解析逻辑:
def pubspecFile = file('../../pubspec.yaml')
def pubspecContent = new groovy.yaml.YamlSlurper().parse(pubspecFile)
def versionParts = pubspecContent.version.split('\\+')
def appVersionCode = versionParts[1] as int
def appVersionName = versionParts[0]
  1. 修改defaultConfig中的版本配置:
defaultConfig {
    applicationId = "com.example.flutter_application_1"
    minSdk = flutter.minSdkVersion
    targetSdk = flutter.targetSdkVersion
    versionCode = appVersionCode
    versionName = appVersionName
}

两种方案均无需手动维护Android端版本号,会自动与pubspec.yaml保持同步,满足多平台版本一致的需求,且无需升级Flutter版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:06