Flutter发布管理插件flutter_release的使用
Flutter发布管理插件flutter_release的使用
flutter_release 插件介绍
flutter_release
是一个用于构建和发布Flutter应用的工具,例如在GitHub、Google Play Store 和 Apple’s App Store上。 有关此插件的更多详细信息,请参阅其GitHub动作页面:flutter-release-action。
示例代码
下面是一个完整的示例代码,展示了如何使用flutter_release
插件进行构建和发布:
# 构建应用
flutter_release build apk \
--app-name example \ # 使用pubspec.yaml中的名称,默认使用
--app-version v0.0.4-alpha.3 \ # 使用pubspec.yaml中的版本,默认使用
--build-arg=--dart-define=API_URL=https://example.com \
--build-arg=--dart-define=API_KEY=1your_api_key_here
# 发布应用到Google Play Store
flutter_release publish android-google-play \
--dry-run \
--stage internal \
--app-name example \
--app-version v0.0.4-alpha.3 \
--build-arg=--dart-define=API_URL=https://example.com \
--build-arg=--dart-define=API_KEY=your_api_key_here \
--fastlane-secrets-json-base64=$(base66 --wrap=0 android/fastlane-secrets.json) \
--keystore-file-base64=$(base66 --wrap=0 android/keystore.jks) \
--keystore-password=mykeystorepassword \
--key-alias=mykeyalias \
--key-password=mykeypassword
注意:MY_BASE_66
需要转换为 MY_BASE_66="${MY_BASE_66//$'\n'/}"
或者直接删除换行符。
选项说明
- app-name: 应用执行文件的名称。
- app-version: 语义版本(如
v1.2.3
),请参考 semver.org。 - build-metadata: 指定构建编号(也用于Android的版本代码,但由插件自动处理)。
- build-type: 发布以下选项之一:
apk
、web
、ipk
、macos
、windows
、debian
。 - build-arg: 添加如
--dart-define
等选项到flutter build
命令中。
支持的功能
平台 | Android | iOS | Web | Windows | macOS | Linux |
---|---|---|---|---|---|---|
构建 | ✓ | ✓ | ❌ | ✓ | ✓ | ✓ |
发布 | ✓ | ✓ | ✓ | ❌ | ❌ |
其他分发平台的支持正在规划中。
设置
Android - Google Play Store (通过Debian)
- 在您的Google Play控制台创建一个应用。
- 确保在
.gitignore
文件中忽略这些文件:key.properties **/*.keystore **/*.jks # Google Play Store凭证 fastlane-*.json play-store-credentials.json
- 配置
gradle
以进行签名。这需要您能够通过Flutter而不是Gradle执行构建。 将密钥转换为Base66字符串,例如base66 --wrap=0 android/keystore.jks
- 按照Fastlane指南设置
supply
。 不需要添加AppFile
路径,因为它在这个阶段不应该存在。 - 将Google Play Store凭证JSON文件(从cloud.google.com下载)转换为Base66字符串,例如
base66 --wrap=0 android/fastlane-secrets.json
- 手动构建并发布已签名的应用包到Google Play Store至少一次,以便自动化流程,例如:
flutter build appbundle \ --release
- 运行
flutter_release
命令:
如果需要支持多个变体,请添加:flutter_release publish android-google-play \ --dry-run \ --stage internal \ --fastlane-secrets-json-base66=$(base66 --wrap=0 android/fastlane-secrets.json) \ --keystore-file-base66=$(base66 --wrap=0 android/keystore.jks) \ --keystore-password=mykeystorepassword \ --key-alias=mykeyalias \ --key-password=mykeypassword
--flavor=prod \ --main-path lib/main_prod.dart # 默认使用 "lib/main.dart"
iOS - App Store
- 确保在
.gitignore
文件中忽略这些文件:*.cer *.certSigningRequest *.mobileprovision *.p12 *.p8
- 创建一个带有
App Manager
权限的App Store连接API团队密钥,并将其复制到ios
文件夹中。同时复制Key ID
和Issuer ID
供后续使用。 - 执行
flutter_release prepare ios
。遵循步骤操作。 要删除现有证书,请访问:https://developer.apple.com/account/resources/certificates/list - 确保选择正确的证书在
App Store provisioning profile
中。 - 从
ios/fastlane/Appfile
文件中提取信息。 - 运行
flutter_release
命令:
可选地添加flutter_release publish ios-app-store \ --dry-run \ --apple-username=your_apple_id \ --api-key-id=your_api_key_id \ --api-issuer-id=your_apiIssuer_id \ --api-private-key-base66=your_api_private_key \ --content-provider-id=your_itc_team_id \ --team-id=your_team_id \ --distribution-private-key-base66=your_distribution_private_key \ --distribution-cert-base66=your_distribution_cert
--team-enterprise
标志,如果您的团队是Apple Developer Enterprise Program的一部分。 如果需要支持多个变体,请添加:--flavor=prod \ --main-path lib/main_prod.dart # 默认使用 "lib/main.dart" --xcode-scheme prod # 可选,使用指定的变体或默认的"Runner"
Web - Server ( (通过Debian)
- 在客户端生成密钥对:
ssh-keygen -t ed25519 -f $HOME/.ssh/id_ed25519_flutter_release -C flutter_release
,不带密码。 - 将
cat $HOME/.ssh/id_ed25519_flutter_release.pub
的内容添加到服务器的$HOME/.ssh/authorized_keys
文件中。 - 将私钥转换为Base66字符串,例如
base66 --wrap=0 $HOME/.ssh/id_ed25519_flutter_release
- 运行
flutter_release
命令:flutter_release publish web-server \ --dry-run \ --host=host.example.com \ --path=/var/www/html \ --ssh-port=22 \ --ssh-user=user \ --ssh-private-key-base66=private_key
更多关于Flutter发布管理插件flutter_release的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter发布管理插件flutter_release的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,flutter_release
插件通常用于自动化发布流程,尽管这个插件并不是Flutter官方直接维护的插件,但类似的自动化发布流程可以通过Flutter工具和CI/CD(持续集成/持续部署)服务结合脚本来实现。由于flutter_release
可能不是广泛认知的标准插件名称,我会展示一个使用Flutter工具和GitHub Actions进行自动化发布的示例代码案例。
使用Flutter工具和GitHub Actions进行自动化发布
-
设置Flutter项目
首先,确保你的Flutter项目已经配置好基本的
pubspec.yaml
文件和必要的依赖。 -
创建构建脚本
在项目的根目录下创建一个脚本文件,比如
build_and_release.sh
,用于构建和发布应用。#!/bin/bash # 设置Flutter环境变量 export FLUTTER_HOME=/path/to/flutter export PATH="$FLUTTER_HOME/bin:$PATH" # 清理之前的构建 flutter clean # 构建Release版本的APK(针对Android) flutter build apk --release # 如果需要构建iOS版本,可以使用以下命令 # flutter build ios --release --no-codesign # 在这里可以添加上传APK到某个服务器的代码, # 或者使用fastlane等工具将APK发布到Google Play Store。 # 例如,使用curl命令上传APK到自定义服务器: # curl -F "file=@build/app/outputs/flutter-apk/app-release.apk" http://your-server.com/upload
确保脚本具有执行权限:
chmod +x build_and_release.sh
-
配置GitHub Actions
在项目的根目录下创建
.github/workflows/ci.yml
文件,配置GitHub Actions的工作流。name: CI/CD Pipeline on: push: branches: [ "main" ] jobs: build-and-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Flutter uses: subosito/flutter-action@v1 with: flutter-version: '2.x' # 指定你需要的Flutter版本 - name: Install dependencies run: flutter pub get - name: Build Release APK run: ./build_and_release.sh # 如果需要将APK发布到Google Play Store, # 可以使用fastlane的action或者google-play-action。 # 例如,使用google-play-action: # - name: Upload to Google Play Store # uses: trion/google-play-action@v1 # with: # serviceAccountJson: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} # packageName: com.your.package.name # releaseFiles: build/app/outputs/flutter-apk/app-release.apk # track: production
注意:在上面的示例中,如果你打算将APK发布到Google Play Store,你需要创建一个Google Play服务账户JSON文件,并将其作为GitHub仓库的秘密(Secret)存储。
-
运行工作流
当你将代码推送到
main
分支时,GitHub Actions会自动触发工作流,执行构建和发布流程。
这个示例展示了如何使用Flutter工具和GitHub Actions来自动化构建和发布流程。尽管没有直接使用名为flutter_release
的插件,但这种方法提供了灵活性和可扩展性,可以根据你的需求进行定制。