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

pubspec.yaml按Flavor区分版本方案测试失败求助

解决Flutter多Flavor版本号配置问题

你之前的方案不生效,核心原因是String.fromEnvironment('version')读取的是Dart编译时注入的环境变量,而非pubspec.yaml里自定义的字段。下面是可行的实现步骤:

1. 编译时注入版本号

放弃在pubspec.yaml中定义version_gold这类自定义字段,改为通过命令行参数直接注入对应Flavor的版本号:

针对不同Flavor,运行项目时添加--dart-define参数:

  • Gold Flavor:
    flutter run --flavor gold --dart-define=APP_VERSION=2.1.3+1
    
  • Light Flavor:
    flutter run --flavor light --dart-define=APP_VERSION=3.0.0+1
    
  • Black Flavor:
    flutter run --flavor black --dart-define=APP_VERSION=1.0.0+1
    

2. 在代码中读取版本号

修改main函数,读取注入的环境变量(建议添加默认值避免空值):

void main() {
  // 读取编译时注入的版本号,默认值可设为基础版本
  String appVersion = String.fromEnvironment('APP_VERSION', defaultValue: '1.0.0+0');
  print('当前版本:$appVersion');
  runApp(const MyApp());
}

3. 同步原生平台(Android/iOS)版本号

如果需要让Android的versionCode/versionName、iOS的CFBundleVersion/CFBundleShortVersionString和Flutter注入的版本号同步,还需做以下配置:

Android端(app/build.gradle)

在defaultConfig块中替换版本相关配置:

defaultConfig {
    applicationId "com.yourpackage.name"
    minSdkVersion flutter.minSdkVersion
    targetSdkVersion flutter.targetSdkVersion
    // 从dart-define中读取版本名和版本码
    versionName project.findProperty('dart.defines.APP_VERSION_NAME') ?: '1.0.0'
    versionCode Integer.parseInt(project.findProperty('dart.defines.APP_VERSION_CODE') ?: '1')
}

此时运行命令需拆分版本名和版本码:

flutter run --flavor gold --dart-define=APP_VERSION_NAME=2.1.3 --dart-define=APP_VERSION_CODE=1

iOS端(Info.plist)

打开ios/Runner/Info.plist,将版本字段替换为变量:

<key>CFBundleShortVersionString</key>
<string>$(APP_VERSION_NAME)</string>
<key>CFBundleVersion</key>
<string>$(APP_VERSION_CODE)</string>

然后在Xcode的对应Flavor Scheme中,添加APP_VERSION_NAME和APP_VERSION_CODE的环境变量即可同步版本。

4. 简化命令(可选)

为避免每次输入长命令,可在项目根目录创建run_flavor.sh脚本(Mac/Linux):

#!/bin/bash
if [ "$1" = "gold" ]; then
  flutter run --flavor gold --dart-define=APP_VERSION_NAME=2.1.3 --dart-define=APP_VERSION_CODE=1
elif [ "$1" = "light" ]; then
  flutter run --flavor light --dart-define=APP_VERSION_NAME=3.0.0 --dart-define=APP_VERSION_CODE=1
elif [ "$1" = "black" ]; then
  flutter run --flavor black --dart-define=APP_VERSION_NAME=1.0.0 --dart-define=APP_VERSION_CODE=1
else
  echo "请指定Flavor: gold/light/black"
fi

运行时只需执行./run_flavor.sh gold即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:42:35