配置参考
flu_release.yaml 是 app-ship 上传引擎和 VSCode 发布中心共用的核心配置文件,放置在项目根目录中。本文档详细说明所有可用的配置字段。
📂 文件位置
your-flutter-project/
├── lib/
├── pubspec.yaml
└── flu_release.yaml ← 发布配置文件完整结构概览
yaml
# 构建配置
build:
android: { ... }
ios: { ... }
# 重试策略
retry:
maxRetries: 3
initialDelayMs: 1000
backoffMultiplier: 2
maxDelayMs: 30000
# 发布平台配置
publish:
pgyer: { ... }
huawei: { ... }
xiaomi: { ... }
oppo: { ... }
vivo: { ... }
tencent: { ... }
app_store: { ... }
harmony: { ... }build — 构建配置
build.android
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
type | 'apk' | 'appbundle' | 否 | 'apk' | 构建产物类型 |
flavor | string | 否 | — | 构建风味(如 production、staging) |
target | string | 否 | — | 构建入口文件 |
buildName | string | 否 | — | 版本名称(覆盖 pubspec.yaml) |
buildNumber | string | 否 | — | 构建号(覆盖 pubspec.yaml) |
yaml
build:
android:
type: 'apk'
flavor: 'production'build.ios
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
scheme | string | 否 | 'Runner' | Xcode Scheme |
exportMethod | string | 否 | 'app-store' | 导出方式:app-store / development / ad-hoc / enterprise |
teamId | string | 否 | — | Apple Team ID |
configuration | string | 否 | 'Release' | 构建配置:Debug / Release |
yaml
build:
ios:
scheme: 'Runner'
exportMethod: 'app-store'
teamId: 'ABCDE12345'retry — 重试策略
上传过程中遇到网络波动时,系统会自动重试。采用 指数退避 策略,每次重试等待时间翻倍。
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
maxRetries | number | 否 | 3 | 最大重试次数 |
initialDelayMs | number | 否 | 1000 | 首次重试等待时间(毫秒) |
backoffMultiplier | number | 否 | 2 | 退避乘数 |
maxDelayMs | number | 否 | 30000 | 最大等待时间(毫秒) |
yaml
retry:
maxRetries: 3
initialDelayMs: 1000 # 第 1 次重试等 1s
backoffMultiplier: 2 # 第 2 次等 2s,第 3 次等 4s
maxDelayMs: 30000 # 等待时间不超过 30spublish — 平台配置
每个平台都有 enable 字段控制是否启用,以及各自的认证参数。
各平台快速对照
| 平台 | 标识 | 必填认证 | 详细文档 |
|---|---|---|---|
| 蒲公英 | pgyer | apiKey | 蒲公英配置 |
| 华为 | huawei | auth.clientId + auth.clientSecret + appId | 华为配置 |
| 小米 | xiaomi | auth.userName + auth.privateKey | 小米配置 |
| OPPO | oppo | auth.clientId + auth.clientSecret | OPPO 配置 |
| vivo | vivo | auth.accessKey + auth.accessSecret | vivo 配置 |
| 腾讯应用宝 | tencent | auth.appId + auth.appKey | 腾讯配置 |
| App Store | app_store | auth.appleId + auth.appPassword | App Store 配置 |
| 鸿蒙 | harmony | auth.clientId + auth.clientSecret + appId | 鸿蒙配置 |
每个平台的详细配置说明见对应的 平台指南。
🔐 环境变量
配置文件支持通过 ${VAR_NAME} 语法引用环境变量,强烈建议 将所有敏感凭证通过环境变量传入:
yaml
publish:
pgyer:
enable: true
apiKey: '${PGYER_API_KEY}'
huawei:
enable: true
auth:
clientId: '${HUAWEI_CLIENT_ID}'
clientSecret: '${HUAWEI_CLIENT_SECRET}'
appId: '${HUAWEI_APP_ID}'设置环境变量
macOS / Linux(添加到 ~/.bashrc 或 ~/.zshrc):
bash
export PGYER_API_KEY="your-api-key"
export HUAWEI_CLIENT_ID="your-client-id"
export HUAWEI_CLIENT_SECRET="your-client-secret"Windows(PowerShell):
powershell
$env:PGYER_API_KEY = "your-api-key"安全最佳实践
永远不要 将明文凭证提交到 Git:
gitignore# .gitignore flu_release.yaml # 如果包含明文凭证推荐方案:提交一个 模板文件,使用环境变量引用:
yaml# flu_release.yaml(可安全提交) publish: pgyer: enable: true apiKey: '${PGYER_API_KEY}'CI/CD 环境:在 CI 平台的密钥管理中配置环境变量
📋 完整配置示例
yaml
# flu_release.yaml — 完整配置示例
# 构建配置
build:
android:
type: 'apk'
ios:
scheme: 'Runner'
exportMethod: 'app-store'
teamId: 'ABCDE12345'
# 重试策略
retry:
maxRetries: 3
initialDelayMs: 1000
backoffMultiplier: 2
maxDelayMs: 30000
# 发布平台
publish:
# 蒲公英 — 内测分发
pgyer:
enable: true
apiKey: '${PGYER_API_KEY}'
description: '新版本发布'
# 华为 AppGallery
huawei:
enable: true
auth:
clientId: '${HUAWEI_CLIENT_ID}'
clientSecret: '${HUAWEI_CLIENT_SECRET}'
appId: 'C100xxxxx'
releaseType: 'draft'
# 小米应用商店
xiaomi:
enable: true
auth:
userName: '${XIAOMI_EMAIL}'
privateKey: '${XIAOMI_API_PASSWORD}'
publicKeyPath: './xiaomi-public-key.cer'
uploadType: 'update'
# OPPO 开放平台
oppo:
enable: true
auth:
clientId: '${OPPO_CLIENT_ID}'
clientSecret: '${OPPO_CLIENT_SECRET}'
# vivo 开发者平台
vivo:
enable: true
auth:
accessKey: '${VIVO_ACCESS_KEY}'
accessSecret: '${VIVO_ACCESS_SECRET}'
# 腾讯应用宝
tencent:
enable: true
auth:
appId: '${TENCENT_APP_ID}'
appKey: '${TENCENT_APP_KEY}'
# Apple App Store
app_store:
enable: true
mode: 'app_store'
appId: '123456789'
auth:
appleId: '${APPLE_ID}'
appPassword: '${APPLE_APP_PASSWORD}'
# 鸿蒙应用市场
harmony:
enable: true
auth:
clientId: '${HARMONY_CLIENT_ID}'
clientSecret: '${HARMONY_CLIENT_SECRET}'
appId: 'C100xxxxx'
releaseType: 'draft'