blob: 6dc9121e5203fc17f516e9b6f1f5dea1e7e09018 [file] [log] [blame] [view]
flutter-embedder.git
=======================================
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](https://github.com/flutter/flutter/wiki/Custom-Flutter-Engine-Embedders).
This repository is a work in progress and should be considered
experimental.
## Requirements
If you're using WSL2 (Windows Subsystem for Linux), see
[SETUP_WINDOWS.md](https://fuchsia.googlesource.com/flutter-embedder/+/refs/heads/main/SETUP_WINDOWS.md)
first.
1. Set `$FUCHSIA_EMBEDDER_DIR` to your flutter-embedder.git checkout location,
for example `~/flutter-embedder`.
```sh
export FUCHSIA_EMBEDDER_DIR=$HOME/flutter-embedder
```
2. Bootstrap the repository's dependencies:
```sh
$FUCHSIA_EMBEDDER_DIR/scripts/bootstrap.sh
```
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:
```sh
$FUCHSIA_EMBEDDER_DIR/tools/ffx emu start workstation_eng.qemu-x64
```
If running in a terminal environment:
```sh
$FUCHSIA_EMBEDDER_DIR/tools/ffx emu start --headless workstation_eng.qemu-x64
```
The workflow below also supports
[Fuchsia builds from source](https://fuchsia.dev/fuchsia-src/get-started/get_fuchsia_source)
that are within Fuchsia's SDK compatibility window (six weeks).
2. Set the default target in ffx to be `fuchsia-emulator`:
```sh
$FUCHSIA_EMBEDDER_DIR/tools/ffx target default set fuchsia-emulator
```
3. Run an example component:
```sh
$FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter
```
- To watch logs for the example component, run:
```sh
$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:
```sh
$FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter --fidl
```
Caveats:
- `--fidl` currently requires setting `$FUCHSIA_DIR` to a
[Fuchsia source checkout](https://fuchsia.dev/fuchsia-src/get-started/get_fuchsia_source)
with a build in `$FUCHSIA_DIR/out/default`. This directory is only
used to read IR files for FIDL, you can still use the
`workstation_eng.qemu-x64` product bundle with `--fidl`.
- `--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`_](https://fuchsia.googlesource.com/flutter-embedder/+/refs/heads/main/docs/debugging.md)
**TODO(akbiggs): Work with Bazel SDK team to get proper support for `--fidl`.**
## Making Flutter Engine changes
Running the Flutter app is handled by the Flutter Engine's
[embedder platform code](https://github.com/flutter/engine/tree/main/shell/platform/embedder).
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](https://fuchsia.googlesource.com/flutter-embedder/+/refs/heads/main/docs/making_engine_changes.md).
This isn't required for changes to only flutter-embedder.git's source code.
## Uploading changes for review.
See [_`git_workflow.md`_](https://fuchsia.googlesource.com/flutter-embedder/+/refs/heads/main/docs/git_workflow.md).