[embedder] Additional bootstrapping.

- Finish moving sdk-integration to third_party.
- Add flutter/flutter as subrepository and use flutter tool from there.
- Update flutter/engine artifacts to match flutter/flutter revisions.
- Move flutter/engine artifacts into a subfolder.
- Run app in the session. This does not work yet because we do not
  have a ViewProvider.

Bug: 46971
Change-Id: If573fffd1a5ce3e4b2b5fb384d559bbf22d04582
25 files changed
tree: ce12c9dd3384185b76e5a38d2e52d1c5080855d9
  1. scripts/
  2. src/
  3. third_party/
  4. tools/
  5. .bazelrc
  6. .gitignore
  7. .gitmodules
  8. AUTHORS
  9. CONTRIBUTING.md
  10. LICENSE
  11. OWNERS
  12. PATENTS
  13. README.md
  14. WORKSPACE.bazel
README.md

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.

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

Requirements

  1. Install a Bazel version no older than the one defined in the WORKSPACE.bazel file, by following the instructions at https://bazel.build/install. In some Linux distributions, sudo apt-get install bazel should be enough.

  2. Make sure this repository has the required submodules:

    git submodule update --recursive --init
    
  3. Ensure that there are Fuchsia SSH keys in your host machine. You will need them for running the Fuchsia emulator.

     [[ -f "${HOME}/.ssh/fuchsia_ed25519" ]] || ssh-keygen -P "" -t ed25519 -f "${HOME}/.ssh/fuchsia_ed25519" -C "${USER}@$(hostname -f) Shared SSH Key for Fuchsia"
    
     [[ -f "${HOME}/.ssh/fuchsia_authorized_keys" ]] || ssh-keygen -y -f "${HOME}/.ssh/fuchsia_ed25519" > "${HOME}/.ssh/fuchsia_authorized_keys"
    

Build and package the sample

Now the repository is ready to build the sample.

  1. Fetch an emulator image and start an emulator:

    tools/ffx product-bundle get workstation.qemu-x64
    tools/ffx emu start --headless workstation.qemu-x64
    
  2. (optional) Watch the device log in a separate window:

    tools/ffx log
    
  3. Run the sample app component:

    scripts/build_and_run_sample_app.sh
    

TODO(akbiggs): Currently the component crashes on startup with an ambient_mark_vmo_exec allowlist issue. We are talking to security to figure out how to handle this.

Syncing engine artifacts

Occasionally you will need to update the Flutter Engine artifacts (embedder.h and libengine_flutter.so) that are used by the embedder to run Flutter apps. A script is provided for this workflow.

Prerequisites

  1. You will need to get the Flutter Engine source code. Note that this is not just cloning https://github.com/flutter/engine.
  2. $ENGINE_DIR should be set to the src folder of your Flutter Engine checkout, for example ~/engine/src.
  3. $FUCHSIA_EMBEDDER_DIR should be set to your flutter-embedder.git checkout, for example ~/flutter-embedder.
  4. $DEPOT_TOOLS should be set to your depot_tools location, for example ~/depot_tools.
  5. You will need to git stash or git commit any local changes to the Flutter Engine or the script will fail.

Running the script

You can run the script with a flutter/engine Git commit to sync the Engine artifacts to that revision.

scripts/sync_engine_artifacts_to_revision.sh <ENGINE_COMMIT_SHA>

A common workflow is to sync your Engine commit to the Flutter tool. To get your Flutter tool's Engine commit, you can do:

cat $FUCHSIA_EMBEDDER_DIR/third_party/dart-pkg/internal/flutter/flutter/bin/internal/engine.version