如何设置Flutter应用程序的内部版本和版本号

Sur*_*gch 7 version flutter

如何设置Flutter应用程序的版本名称和版本代码,而无需进入Android和iOS设置?

在我的pubspec.yaml中

version: 2.0.0
Run Code Online (Sandbox Code Playgroud)

但我看不到内部编号的地方。

Yus*_*Amr 21

对我来说我的版本是

version: 1.0.0+1

我把它改为

version: 1.2.0+1

然后在终端

flutter build appbundle --build-name=1.2.0+1 --build-number=2
Run Code Online (Sandbox Code Playgroud)

  • 版本末尾的“+1”是内部版本号,而名称通常采用“xyz”形式。所以我会使用 `version: 1.2.0+2` 和 `flutter build appbundle --build-name=1.2.0 --build-number=2` (10认同)

Sur*_*gch 20

感谢用户abion47从文章Versioning with Flutter 中找到并浓缩了以下答案。

重新启用自动版本控制

默认情况下,Flutter 项目设置为在构建项目时根据 pubspec.yaml 中的版本设置自动更新 Android 和 iOS 设置。但是,如果您后来覆盖了这些设置,则可以通过执行以下操作来重新启用该行为:

IOS

打开 ios/Runner/Info.plist 文件。将 CFBundleVersion 的值设置为 $(FLUTTER_BUILD_NUMBER) 并将 CFBundleShortVersionString 的值设置为 $(FLUTTER_BUILD_NAME)。该文件的 XML 应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  ...
  <key>CFBundleVersion</key>
  <string>$(FLUTTER_BUILD_NUMBER)</string>
  <key>CFBundleShortVersionString</key>
  <string>$(FLUTTER_BUILD_NAME)</string>
  ...
</dict>
...
Run Code Online (Sandbox Code Playgroud)

安卓

打开android/app/build.gradle文件。确保您正确加载文件顶部的 Flutter 属性:

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) {
    throw new GradleException("versionCode not found. Define flutter.versionCode in the local.properties file.")
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    throw new GradleException("versionName not found. Define flutter.versionName in the local.properties file.")
}
Run Code Online (Sandbox Code Playgroud)

然后设置该android.defaultConfig部分,即versionNameflutterVersionNameversionCodeflutterVersionCode.toInteger()

android {
  ...
  defaultConfig {
    ...
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 更新 **pubspec.yaml** 文件后,我检查了 *local.properties* 但它显示默认 flutter.versionName=1.0.0 &amp; flutter.versionCode=1。这是您上面显示的默认 gradle 结构。那么这里有什么新内容呢? (2认同)

Sur*_*gch 19

您可以在pubspec.yaml中的同一位置更新版本名称和版本代码号。只需将它们与+标志分开即可。例如:

version: 2.0.0+8
Run Code Online (Sandbox Code Playgroud)

这意味着

  • 版本名称是 2.0.0
  • 版本代码是 8

在新项目的文档中对此进行了描述(但是,如果您正在处理旧项目,则可能已将其删除):

以下内容定义了您的应用程序的版本和内部版本号。版本号是用点号分隔的三个数字,例如1.2.43,后跟一个可选的内部号,用+分隔。通过分别指定--build-name和--build-number,可以在flift构建中覆盖版本和构建器编号。在semver.org上了解有关版本控制的更多信息。

version: 1.0.0+1

默认情况下,Flutter项目被设置为version在构建项目时根据pubspec.yaml中的设置自动更新Android和iOS设置。

也可以看看:

  • 我有同样的问题,无论我在这个版本字段中输入什么,或者作为 flutter build 的 --build-number 或 --build-name 参数,app-release.apk 的版本代码始终为 1(因此 Google Play 拒绝它在随后的上传)。versionCode 1 和 versionName 1.0.0 在 release 目录的 output.json 文件中也可见。 (3认同)
  • 我曾遇到过烦人的经历,其中在pubspec.yaml中指定的内部版本号在iOS版本中未更新,并且我仅在等待新的存档内部版本时才注意到,该存档随后显示旧的内部版本号。现在,在执行新的iOS版本构建之前,我总是在info.plist中仔细检查构建版本。 (2认同)

Men*_*elG 12

对我来说,有效的是在文件中设置正确的版本pubspec.yaml ,然后运行:

flutter clean
Run Code Online (Sandbox Code Playgroud)

进而:

flutter pub get
Run Code Online (Sandbox Code Playgroud)

flutter clean确实有效。

您还应该运行:

pod install
Run Code Online (Sandbox Code Playgroud)

在你的/ios目录下

最后,您必须执行:

flutter run
Run Code Online (Sandbox Code Playgroud)

因为这不仅会运行您的应用程序,还会更新local.properties文件,一旦build.gradle您执行flutter run.

也可以看看:


Sum*_*kla 7

什么对我有用(Android):

  • 更新flutter 项目文件内的pubspec.yamlversionnameversioncode
  • 在终端上运行flutter pub get
  • 在设备中运行您的项目。
  • 在 Andriod Studio 中打开android模块并检查gradle 文件夹中local.properties是否有更新的flutter.versionName flutter.versionCode文件。