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
相关产品推荐
相关产品推荐

