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文件中,可直接从该文件读取:
- 在
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) } }
- 修改
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):
- 在
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]
- 修改
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
相关产品推荐
相关产品推荐

