在使用Flutter管理APP版本时,打开pubspec.yaml只看到一个version字段,例如:version: 1.0.0+1

我们在使用原生iOS或者Android开发的时候,我们会在info.plist中设置versionbuild或是在build.gradle中设置versionNameversionCode,他们分别表示APP的版本和构建版本。

Android开发中简单的说,versionCode是给机器看的,versionName是给人看的。更新的时候,机器根据versionCode判断是升级还是降级,即使versionName(版本号)比以前的高,但是versionCode比以前的低,机器还是会判断是降级。

Flutter采用的是加号式的版本描述方式,+前面是版本号,+后面是当前版本的build号。格式是 version: major.minor.patch+build,其中 majorminorpatch 表示不同的发布级别,build 是构建号。

1
version: 1.0.0+1

这里 1.0.0 是版本号,+1 是构建号。每次发布新版本到应用程序商店时,您都应该至少增加构建号。

Androidandroid/app/build.gradle 文件中,versionCodeversionNamepubspec.yaml 文件中获取:

1
2
3
4
5
6
7
8
android {
...
defaultConfig {
...
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
}

iOS 中,Flutter也会自动更新项目的 Info.plist 文件,但如果您需要手动更新,您可以编辑 CFBundleShortVersionString(版本号)和 CFBundleVersion(构建号):

1
2
3
4
5
6
7
8
9
10
<!-- version -->
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>

<!-- build -->
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSApplicationCategoryType</key>

Flutter在编译的时候会生成ios/Flutter/Generated.xcconfigandroid/local.properties文件。这两个文件由Flutter编译自动生成,不可更改。记录了包含SDK路径或者文件路径,版本信息,环境配置(release/debug)等信息。原生工程获取版本信息的变量就定义在这两个文件里面。

Reference

Flutter设置APP版本与构建版本