Flutter发布管理插件flutter_release的使用

发布于 1周前 作者 gougou168 来自 Flutter

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: 发布以下选项之一:apkwebipkmacoswindowsdebian
  • build-arg: 添加如 --dart-define 等选项到 flutter build 命令中。

支持的功能

平台 Android iOS Web Windows macOS Linux
构建
发布

其他分发平台的支持正在规划中。

设置

Android - Google Play Store (通过Debian)
  1. 在您的Google Play控制台创建一个应用。
  2. 确保在.gitignore文件中忽略这些文件:
    key.properties
    **/*.keystore
    **/*.jks
    
    # Google Play Store凭证
    fastlane-*.json
    play-store-credentials.json
    
  3. 配置gradle以进行签名。这需要您能够通过Flutter而不是Gradle执行构建。 将密钥转换为Base66字符串,例如base66 --wrap=0 android/keystore.jks
  4. 按照Fastlane指南设置supply。 不需要添加AppFile路径,因为它在这个阶段不应该存在。
  5. 将Google Play Store凭证JSON文件(从cloud.google.com下载)转换为Base66字符串,例如base66 --wrap=0 android/fastlane-secrets.json
  6. 手动构建并发布已签名的应用包到Google Play Store至少一次,以便自动化流程,例如:
    flutter build appbundle \
        --release
    
  7. 运行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
  1. 确保在.gitignore文件中忽略这些文件:
    *.cer
    *.certSigningRequest
    *.mobileprovision
    *.p12
    *.p8
    
  2. 创建一个带有App Manager权限的App Store连接API团队密钥,并将其复制到ios文件夹中。同时复制Key IDIssuer ID供后续使用。
  3. 执行flutter_release prepare ios。遵循步骤操作。 要删除现有证书,请访问:https://developer.apple.com/account/resources/certificates/list
  4. 确保选择正确的证书在App Store provisioning profile中。
  5. ios/fastlane/Appfile文件中提取信息。
  6. 运行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)
  1. 在客户端生成密钥对:ssh-keygen -t ed25519 -f $HOME/.ssh/id_ed25519_flutter_release -C flutter_release,不带密码。
  2. cat $HOME/.ssh/id_ed25519_flutter_release.pub的内容添加到服务器的$HOME/.ssh/authorized_keys文件中。
  3. 将私钥转换为Base66字符串,例如base66 --wrap=0 $HOME/.ssh/id_ed25519_flutter_release
  4. 运行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

1 回复

更多关于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进行自动化发布

  1. 设置Flutter项目

    首先,确保你的Flutter项目已经配置好基本的pubspec.yaml文件和必要的依赖。

  2. 创建构建脚本

    在项目的根目录下创建一个脚本文件,比如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
    
  3. 配置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)存储。

  4. 运行工作流

    当你将代码推送到main分支时,GitHub Actions会自动触发工作流,执行构建和发布流程。

这个示例展示了如何使用Flutter工具和GitHub Actions来自动化构建和发布流程。尽管没有直接使用名为flutter_release的插件,但这种方法提供了灵活性和可扩展性,可以根据你的需求进行定制。

回到顶部