Continuity is The Father of Success

Androidアプリとかゲームとか。毎日続けてるものについて。

BitriseでFlutterビルドするときのStackについて

TL;DR

  • Stableブランチを利用するなら、StackはmacOSがおすすめ
  • BetaブランチやDevブランチを利用するなら、Flutter Stepが利用可能
  • AndroidのAABに Flutter Build Stepが対応していないので、Script Stepで flutter build appbundle

BitriseのFlutterサポート

Flutter Meetup Tokyo #8 の飛び込みLTで、 @macs_6 さんがBitriseのFlutter stackについて触れていました。

flutter-jp.connpass.com

はや4ヶ月が立ち、サポートがどうなっているんだろう……と思っていたところmacs_6さんから下記情報が。

そんなわけで、BitriseでFlutterのビルドを行う際のあれこれを書いておきます。

BitriseのFlutterスタック

自分が確認した限りでは、2019年4月13日のアップデートで Flutter 1.2.1 が入っているようです。

discuss.bitrise.io

ブログポストには出てこないんですが、PRのPre-installed tool versions に出てます。

Weekly VM update - 2019-04-12 by bitrisekristof · Pull Request #272 · bitrise-io/bitrise.io · GitHub

こちらが2019年7月20日に、Flutter 1.7.8+hotfix.3へ更新されています。

discuss.bitrise.io

下記全てのStackで更新されているようなので、これまでに下記Stackを利用していた場合にはそのままPre-InstallのFlutter SDKを利用できるようになりました。

Android用のStackは対応がされていないので、FlutterでAndroidのみ対応する場合でもmacOS Stackを利用するのが良さそうです。 XcodeのStackにも、下記の通りAndroid SDKとNDKが入っています。 (Doc等には記載されていないのですが、Bitrise WorkflowからStackを開くと下記の記載があります。。。)

The latest available Xcode 10.2.x (including betas), Android SDK and NDK, Cordova, Ionic, Flutter and Ruby (to support React Native) installed on macOS 10.14 (Mojave).

実際にXCode 10.2系のsystem_reportsを見に行くと、Androidのツールが入っていることがわかります。

bitrise.io/osx-xcode-10.2.x.log at master · bitrise-io/bitrise.io · GitHub

Flutter SDKがPre-Installになると何が嬉しいのか

ビルドの実行時間が大幅に短縮されます!!! Bitriseの無料プランでは1回のビルドが10分以内であることが求められるので、この時間短縮は(僕にとって)非常に嬉しいものでした。

どれぐらい短縮されるかというと、自分の簡単なアプリで Flutter Stepと Script Stepを利用した場合には下記の通りの時間短縮です。 どちらもFlutter 1.7.8で flutter build appbundle しています。

Flutter Step Script Step
f:id:D_R_1009:20190722010731p:plain f:id:D_R_1009:20190722010743p:plain

Stable以外のブランチを利用するには?

Flutter Stepを利用することができます。 こちらは利用するFlutter SDKのバージョンを指定することができるので、自分の利用したいブランチを指定することができます。

諸事情がある場合には Flutter Stepがおすすめです。

Android App Bundleを利用したい

Script Stepで flutter build appbundle をそのまま実行することができます。 上に例示したケースでは、下記のステップを作成しました。Bitrise ymlから該当箇所を抜き出します。

workflows:
  Android-release:
    steps:
    - activate-ssh-key: {}
    - git-clone: {}
    - script:
        inputs:
        - content: |-
            #!/usr/bin/env bash
            # fail if any commands fails
            set -e
            # debug log
            set -x

            # write your script here
            flutter build appbundle --release
    - sign-apk:
        inputs:
        - android_app: "$BITRISE_AAB_PATH"
        - apk_path: build/app/outputs/bundle/release/app.aab
    - google-play-deploy:
        inputs:
        - service_account_json_key_path: "$BITRISEIO_SERVICE_ACCOUNT_JSON_KEY_URL"
        - package_name: $PACKAGE_NAME
        - apk_path: "$BITRISE_SIGNED_APK_PATH"

というのも Flutter Build StepがまだAndroid App Bundleに対応していないためです。 近いうちに対応されると思うので、その場合には Flutter Build コマンドで対応できそうです。

github.com

(PRを作成しようと土日にやっていたのですが、終わりませんでした。。。ディアセンパイステージが面白すぎたから仕方ないのです。。。)

まとめ

Bitriseは各種対応が早くて便利だなーと思います。 個人開発のアプリも、またBitriseでCI回していきたいなー。