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

如何获取原生Dart程序pubspec.yaml中的构建与版本号

原生Dart程序获取pubspec.yaml版本号与构建号的解决方案

由于dart2native编译生成的可执行文件不会携带原项目的pubspec.yaml文件,且Flutter生态的package_info_plus包不支持纯原生Dart场景,可采用以下两种无额外特殊依赖的方案实现:

  • 方案1:编译时通过环境变量注入
    该方式操作最简单,无需引入额外依赖包。
    你可以在编译前通过脚本读取pubspec.yaml中的version字段,拆分出版本号(+号前的部分)和构建号(+号后的部分)后,通过dart compile的--define参数将两个值注入为编译时常量,业务代码中直接读取常量即可。
    代码调用示例:
// 读取编译时注入的常量,缺省值可自行定义
const String appVersion = String.fromEnvironment('APP_VERSION', defaultValue: 'unknown');
const String appBuildNumber = String.fromEnvironment('APP_BUILD_NUMBER', defaultValue: '0');

Linux/macOS 环境编译脚本示例:

# 读取pubspec.yaml中的version字段值
FULL_VERSION=$(grep '^version: ' pubspec.yaml | awk '{print $2}')
# 拆分出版本号和构建号
APP_VERSION=${FULL_VERSION%+*}
APP_BUILD_NUMBER=${FULL_VERSION#*+}
# 编译时注入参数,生成可执行文件
dart compile exe bin/你的项目入口文件.dart -o 输出的可执行文件名 \
  --define=APP_VERSION=$APP_VERSION \
  --define=APP_BUILD_NUMBER=$APP_BUILD_NUMBER

Windows PowerShell 环境可按照相同逻辑修改脚本语法即可。

  • 方案2:构建时自动生成常量代码
    如果不想手动维护编译脚本,可以使用Dart官方的build_runner工具,自定义简单的构建器,在预构建阶段自动读取pubspec.yaml的版本信息,生成一个包含对应常量的.dart文件,业务代码直接引用该文件的常量即可。该方案同样会把版本信息硬编码到最终的二进制文件中,运行时不需要依赖外部的pubspec.yaml文件。
    两种方案都完全适配原生Dart场景,编译后的可执行文件可独立运行,无需携带任何原项目配置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:06:07