flutter/docs/tool/Engine-artifacts.md
Matan Lurey d2de6c65ec
Roll forward "Content aware hash moved..." with fix (#166873)
Rolls forward https://github.com/flutter/flutter/pull/166717.

Does not copy the `README` or `DEPS` files, and instead uses synthetic
scratch files.

These files can change, so we can't possibly know how to hash them
consistently.
2025-04-09 20:24:58 +00:00

3.2 KiB

How flutter fetches engine artifacts

While in the same repository, the flutter (tool), which is used to run and test the framework, needs to know how to download the engine artifacts for the current platform and target device. Engine artifacts include dart (the standalone Dart SDK), which runs flutter itself, and per-platform and build mode prebuilt engines (which include the C++ compiled engine, and the embedders for Android, iOS, and so-on).

An example of cached engine artifacts

When using a released version of Flutter, i.e. from a channel such as stable, bin/internal/engine.version is set to the git commit SHA for a merged commit in https://github.com/flutter/flutter, where the engine artifacts have already been pre-built and uploaded.

When using the master channel, or contributing to Flutter (which is typically as a fork of Flutter's master channel), the git commit SHA is computed by using git merge-base HEAD upstream/master (falling back to git merge-base HEAD origin/master to support direct forks or flutter/flutter).

For advanced use-cases, such as on CI platforms, or for custom 1-off testing using a pre-built Flutter engine (to use a locally built Flutter engine see locally built engines), the environment variable FLUTTER_PREBUILT_ENGINE_VERSION can be set, again to a git commit SHA for a merged commit in flutter/flutter:

$ FLUTTER_PREBUILT_ENGINE_VERSION=abc123 flutter --version
..
Engine • revision abc123 ..
..
stateDiagram-v2
    [*] --> CheckEnvVar
    CheckEnvVar: <code>FLUTTER_PREBUILT_ENGINE_VERSION</code> set?
    UseEnvVar: Use <code>FLUTTER_PREBUILT_ENGINE_VERSION</code>
    CheckReleaseFile: <code>bin/internal/engine.version</code> exists?
    UseReleaseFile: Use <code>bin/internal/engine.version</code>
    UseMergeBase: <code>git merge-base HEAD upstream/master</code>

    CheckEnvVar --> UseEnvVar: Yes
    CheckEnvVar --> CheckReleaseFile: No
    UseEnvVar --> [*]: Done
    CheckReleaseFile --> UseReleaseFile: Yes
    CheckReleaseFile --> UseMergeBase: No
    UseReleaseFile --> [*]: Done
    UseMergeBase --> [*]: Done

References

The script(s) that compute (and test the computation of) the engine version:

The tool uses the engine version in the following locations: