[embedder] Add workflow for testing local Fuchsia.

This enables testing flutter-embedder.git with changes to
the Fuchsia SDK and platform, for example for validating a
new platform API by writing a Flutter component.

Using this workflow and https://fxrev.dev/753582, I was able
to see logs from a new Fuchsia API when running the example

[381.267][scenic][scenic][E]: [src/ui/scenic/lib/scenic/util/error_reporter.cc:24] Flatland client(FlutterEmbedder): akbiggs: Hello from F

Change-Id: I7055279dab7168984eb8a0b489aeaa7f18c64adc
Reviewed-on: https://fuchsia-review.googlesource.com/c/flutter-embedder/+/753467
Reviewed-by: Naud Ghebre <naudzghebre@google.com>
4 files changed
tree: 9ea8bc887f0cdc0f8fe4bb78f1eb43f4865b4b74
  1. .vscode/
  2. docs/
  3. hooks/
  4. scripts/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .clang-format
  10. .editorconfig
  11. .gitignore
  12. .gitmodules
  16. OWNERS
  18. README.md
  20. WORKSPACE.bazel


The Flutter Embedder for Fuchsia is a new in-progress runtime for Flutter apps on Fuchsia. This runtime is built on top of Flutter's embedder platform.

This repository is a work in progress and should be considered experimental.


This embedder can currently only be built on Linux, not Mac or Windows (native).

If you're using WSL2 (Windows Subsystem for Linux), see SETUP_WINDOWS.md first.

  1. Set $FUCHSIA_EMBEDDER_DIR to your flutter-embedder.git checkout location, for example ~/flutter-embedder.

    export FUCHSIA_EMBEDDER_DIR=$HOME/flutter-embedder
  2. Bootstrap the repository's dependencies:


    This script initializes tools (including bazel and ffx), installs some Git hooks and downloads the workstation_eng.qemu-x64 product bundle, which you can use to run the examples below.

Run an example app

  1. Start the emulator.

    If running in a graphical environment:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx emu start workstation_eng.qemu-x64

    If running in a terminal environment:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx emu start --headless workstation_eng.qemu-x64

    The workflow below also supports Fuchsia builds from source that are within Fuchsia's SDK compatibility window (six weeks).

  2. Set the default target in ffx to be fuchsia-emulator:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx target default set fuchsia-emulator
  3. Run an example component:

    $FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter
    • To watch logs for the example component, run:

      $FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter --log

      If you want to watch all logs, run $FUCHSIA_EMBEDDER_DIR/tools/ffx log in a separate terminal.

    • To watch FIDL calls for the example component, run:

      $FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter --fidl


      • --fidl currently requires using a local Fuchsia SDK instead of the prebuilt Fuchsia SDK. See this guide for setup instructions.

      • --fidl attaches after the component has been run, so it does not pick up FIDL calls made when the component starts.

    • To attach a debugger to the example component, see debugging.md

      TODO(akbiggs): Work with Bazel SDK team to get proper support for --fidl.

Uploading changes for review.

See git_workflow.md.

Making Flutter Engine changes

Running the Flutter app is handled by the Flutter Engine's embedder platform code. This code is compiled into a shared library called libflutter_engine.so, which we can interact with using the embedder.h header.

If you need to make changes to this Flutter Engine code (for example for testing a new API in embedder.h with this embedder) see making_engine_changes.md for instructions.

This isn‘t required for changes to only flutter-embedder.git’s source code.

Testing Fuchsia SDK changes

You may want to test changes to the Fuchsia platform (fuchsia.git) against the flutter-embedder repository locally (for example, to validate a WIP API using a Flutter component). To do so, see testing_fuchsia_sdk_changes.md.

This isn‘t required for changes to only flutter-embedder.git’s source code (in which case you can follow “Run an example app”) or changes to only fuchsia.git's non-SDK code (in which case you can run the example component on an emulator from fuchsia.git). It is only necessary if you have an unsubmitted API in the Fuchsia SDK that you want to test in flutter-embedder.