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

时间:2019-01-25 00:39:14

标签: flutter version

如何在不进入Android和iOS设置的情况下设置Flutter应用的版本名称和版本代码?

我在pubspec.yaml中拥有

version: 2.0.0

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

5 个答案:

答案 0 :(得分:9)

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

version: 2.0.0+8

这是

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

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

  

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

     

version: 1.0.0+1

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

另请参见:

答案 1 :(得分:6)

感谢用户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>
...

Android

打开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.")
}

然后设置android.defaultConfig部分,以使versionNameflutterVersionName,而versionCodeflutterVersionCode.toInteger()

android {
  ...
  defaultConfig {
    ...
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
  }
}

答案 2 :(得分:2)

在Android中,内部版本号用作versionName,而内部版本号用作versionCode。 在https://developer.android.com/studio/publish/versioning上了解有关Android版本的更多信息 在iOS中,内部版本名称用作CFBundleShortVersionString,而内部版本编号用作CFBundleVersion。 阅读有关iOS版本的更多信息,网址为 https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html

您可以在pubsec.yaml中获得以上信息

您将在android / app / build.gradle中找到versionCode或内部版本号(对于android)。

defaultConfig {
        applicationId "com.fabio.resturanto"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        multiDexEnabled true

    }

您的local.properties文件中具有flutterVersionCode和flutterVersionName。这特定于Android版本

可以从pubspec.ymal设置两个iOS / Android版本

version: 1.2.0+1

此处1.2.0是版本名称,而+1是版本代码。 此处的更改(pubspec.ymal)将同时反映Android和iOS版本名称和版本代码。

答案 3 :(得分:2)

更新应用的版本号

该应用的默认版本号为1.0.0。要对其进行更新,请导航至pubspec.yaml文件并更新以下行:

version: 1.0.0+1

版本号是由点号分隔的三个数字,例如上例中的1.0.0,后跟可选的内部版本号,例如上述示例中的1,并以+分隔。

可以分别通过指定--build-name--build-number在Flutter的版本中覆盖版本和内部版本号。

在Android中,build-name用作versionName,而build-number则用作versionCode。有关更多信息,请参阅Android文档中的Version your app

更新pubspec文件中的版本号后,从项目顶部运行flutter pub get,或使用IDE中的``Pub获取''按钮。这将更新versionName文件中的versionCodelocal.properties,随后在重建Flutter应用程序时会在build.gradle文件中对其进行更新。

文档:https://flutter.dev/docs/deployment/android#updating-the-apps-version-number

答案 4 :(得分:1)

对我有用的东西

  • 将Flutter项目文件中的 pubspec.yaml 更新为versionnameversioncode
  • 运行flutter pub get
  • 在设备中运行项目。
  • 在Andriod Studio中打开 android 模块,然后检查local.properties中是否有更新的flutter.versionName flutter.versionCode文件位于gradle文件夹中。