🐡

C++コンパイラが使えなくてもFlutterでWindowsアプリをビルドしたい

に公開

FlutterのWindowsアプリのビルドには開発者モードにする必要があったり、Visual Studioのデスクトップ開発のプラグインが必要になります。

しかし、環境によるセキュリティの都合で開発者モードがブロックされていたり、プラグインを入れられないという場合があります。

それでも個人や社内の小さいアプリを作りたいという場合に便利なwin32_runnerを紹介します。

win32_runnerとは

flutter createを使用して新しいFlutterプロジェクトを作成するときに提供されるデフォルトの C++コマンドの代わりに、DartコマンドからFlutterアプリを実行できるようにする実験的なパッケージです。(パッケージの説明部分を翻訳)

win32_runnerを利用すれば、開発者モードやVisual Studioのデスクトップ開発のプラグインがなく、cppコマンドが使用できなくても、dartコマンドが使用できればWindowsアプリをビルドできます。

パッケージ名はwin32_runnerですが、生成されたexeファイルを起動しタスクマネージャーで確認したところ、32bitの表記がないので64bitで動いていそうです。

注意として、こちらのパッケージは実験段階であり本番環境では利用しないようにとなっています。
また、プラグインもサポートできないとあります。dart以外の言語があると正常にビルドできないみたいですね。
※プラグインは、ネイティブコード(iOSやAndroidのコード)を含むパッケージの一種です。
パッケージがプラグインかどうかはpub.dev上では判断できないので、パッケージを入れてみて、中身を確認するしかなさそうです。

使ってみる

バージョンはwin32_runner: ^0.2.3のものを使用しています。

  1. リポジトリをクローンします。

    C:\src> git clone https://github.com/halildurmus/win32_runner.git
    C:\src> cd win32_runner
    
  2. win32_runnerの依存関係をインストールします。

    C:\src\win32_runner> dart pub get
    
  3. サンプルアプリを作成します。

    C:\src\win32_runner> cd ..
    C:\src> flutter create simpleapp
    C:\src> cd simpleapp
    
  4. Flutter コードとアセットをbuild\サブディレクトリにコンパイルします。

    C:\src\simpleapp> flutter assemble -dTargetPlatform=windows-x64 --output=build -dBuildMode=release release_bundle_windows-x64_assets
    
  5. Dartランナーをコンパイルする:

    C:\src\simpleapp> dart compile exe ..\win32_runner\example\win32_runner.dart -o win32_runner.exe
    
  6. Flutter アプリを実行します。

    C:\src\simpleapp> .\win32_runner
    

これらの手順でプロジェクト直下にwin32_runner.exeが作成され、ダブルクリックで起動できます。

もしexeファイルを移動したい場合は、win32_runner.exe, buildフォルダ, windowsフォルダを同じ階層に配置すればexeが実行できます。
exeファイル単体で動くようにビルドはできませんが、個人利用の範囲では十分ありがたいパッケージですね。

おまけ

おまけとして作成したプロジェクトにパッケージを適用してみます。
今回はanimated_digitを試してみました。
exeとして出力しても問題なく動作しています。

また、既存のプロジェクトで実行したところ、riverpod, http, fl_chart, flutter_animateなどは問題なく使えていそうでした。しかし、一部のページではグレーアウトになりました。プラグインはビルド時にエラーにならず、実行時エラーになるようですね。

なお、掲載したソースコードはサンプルになります。本ソースコードを使用することで発生するいかなる損害や不利益について、当社は一切の責任を負いませんので自己の責任においてご利用ください。

Discussion