The flutter tool will now download and use an `engine_stamp.json` file
to determine the engine version, content hash, build date, and commit
date.
The file is treated as a new `DevelopmentArtifact.informative` and is
fetched before flutterVersion is used. This ensures we have build
information for a clean checkout with no bin/cache folder. Users that
download from flutter.dev will have engine_stamp.json, so its a no-op.
This change provides support for content hashed engine artifacts, who's
revision (the hash) is not a git commit sha. A side benefit is "git" is
only used at build time to extract this information.
> [!NOTE]
> Content hashed artifacts are not enabled yet for downloads;
bin/internal/engine.version (releases) and the shell updaters still look
for the git commit sha. One can test this out by setting
`FLUTTER_PREBUILD_ENGINE_VERSION` to the content hash.
<!-- start_original_pr_link -->
Reverts: flutter/flutter#171399
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Many Gradle/Android related tasks are failing
([one
example](https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_mokey%20run_release_test/1347/overview))
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: reidbaker
<!-- end_original_pr_author -->
<!-- start_reviewers -->
Reviewed By: {gmackall}
<!-- end_reviewers -->
<!-- start_revert_body -->
This change reverts the following previous change:
https://gradle.org/whats-new/gradle-9/ is coming and with it includes
some deprecated methods. Some like
https://github.com/flutter/flutter/pull/171397 can be fixed by
annotations and calling new methods. Some like the deprecation of
minsdkversion on Variant require bumping the minimum versions to be able
to compile code that will work.
b/368604254
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
<!-- end_revert_body -->
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
https://gradle.org/whats-new/gradle-9/ is coming and with it includes
some deprecated methods. Some like
https://github.com/flutter/flutter/pull/171397 can be fixed by
annotations and calling new methods. Some like the deprecation of
minsdkversion on Variant require bumping the minimum versions to be able
to compile code that will work.
b/368604254
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
Requires a modification to how we compute the hotReloadSourcesUri
contents.
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
Tracks the following metrics:
- Overall launch time with/without generating the widget preview
scaffold
- Time from detecting a file change within the tracked project to
actually loading the updated previews into the previewer
Fixes https://github.com/flutter/flutter/issues/166418
This allows for developers to perform a hot restart on the preview
environment in the case they get into a bad state.
This change adds a `hotRestartPreviewer` method to the `widget-preview`
DTD service registered by the Flutter Tool, which is invoked by the
previewer.

Updates the widget previewer to properly handle previews defined across
a workspace. This is effectively equivalent to displaying previews from
multiple individual projects, which required a fairly significant rework
to properly support:
- resolving asset paths to the right project
- loading assets across projects in the workspace
- tracking changes to pubspec.yaml files across the workspace
While making this change, it became apparent that we don't need to
explicitly list the assets from the various projects explicitly in the
scaffold's pubspec.yaml as they're automatically pulled in by adding
those project's as dependencies and using the `package/$ASSET_PATH`
format to load the assets from the scaffold. This allowed for the
removal of a significant amount of logic related to building the
scaffold's pubspec.
Fixes https://github.com/flutter/flutter/issues/169268
This PR adds a `--profile-microtasks` flag to `flutter run` that can be
used to set [the Flutter Engine's `--profile-microtasks`
switch](https://github.com/flutter/flutter/pull/170690).
- **bump template version, update migration code to handle api 21-23 and
expand it to cover multiple min api level definitions**
- **bump add to app project to minimum api level 24**
- **PathUtilsTest converted to using config, removed test code that
branched on versions older than 24**
- **Update additional build.gradle files to have minsdk 24 and
documenation**
Related to #170807
G3 cls
- espresso https://critique.corp.google.com/cl/776592881
- integration tests cl/778034198
- removal of pre api 23 samples tests cl/777652802
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
---------
Co-authored-by: Gray Mackall <34871572+gmackall@users.noreply.github.com>
Provides extra minification controls for web builds. Updates the
existing `--minify` flag to pass its value to both JS and wasm (instead
of just JS).
Also adds two new flags `--minify-js` and `--minify-wasm` which toggle
minification for just one of the web targets. While JS minification has
a huge impact on code size, wasm minification has a much smaller effect
on the program's size. Since minification can obfuscate useful info
(like errors) one may want to turn off minification for wasm but leave
it on for JS.
The plan is to temporarily use `--no-minify-wasm` for devtools to help
debug some exceptions being seen.
---------
Co-authored-by: Nate Biggs <natebiggs@google.com>
Reworked the dependency model to be library based instead of script
based in order to support libraries spanning multiple scripts.
Also refactored test logic to improve maintainability and simply writing
tests against the `PreviewDetector`.
Reland https://github.com/flutter/flutter/pull/170686.
Closes: https://github.com/flutter/flutter/issues/168961.
Original PR in first commit. Fix in subsequent commit:
* Do process invocation of `flutter pub add` in a different way.
Fixes: `ProcessException: %1 is not a valid Win32 application`
Reproduced locally by changing
dev/devicelab/bin/tasks/native_assets_android.dart to
`DeviceOperatingSystem.windows` and verified the `flutter pub add` call
now succeeds.
(Also, moved the add integration test into the create test project to
avoid having multiple `flutter pub get`s.)
Third time is the charm.
<!-- start_original_pr_link -->
Reverts: flutter/flutter#170686
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Broke [`Windows_mokey
native_assets_android`](https://ci.chromium.org/ui/p/flutter/builders/prod/Windows_mokey%20native_assets_android/2518/overview)
again.
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: dcharkes
<!-- end_original_pr_author -->
<!-- start_reviewers -->
Reviewed By: {bkonyi, matanlurey}
<!-- end_reviewers -->
<!-- start_revert_body -->
This change reverts the following previous change:
Reland https://github.com/flutter/flutter/pull/170374
Original PR in first commit. Fixes in subsequent commits:
* `flutter` is not on the `PATH` in the device lab, use `_flutterBin`
(consistent with the rest of the test).
Fixes `flutter` not found.
* `flutter test integration_test` now does not build assets for the host
anymore. `flutter test` builds assets for the host. The `TestCommand` is
now special-case to check for `_isIntegrationTest`.
Fixes `clang++` not found. (It's the compiler for Linux, but we are
running integration tests on an Android device.)
Tests pass locally with:
```
$ cd /Users/dacoharkes/src/flutter/flutter/dev/devicelab && dart bin/test_runner.dart test -t native_assets_android
```
Note:
* The device lab tests are not run on presubmit until
https://github.com/flutter/flutter/issues/170682 is addressed.
* The emulator tests are not run at all atm:
https://github.com/flutter/flutter/issues/170529.
<!-- end_revert_body -->
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
Reland https://github.com/flutter/flutter/pull/170374
Original PR in first commit. Fixes in subsequent commits:
* `flutter` is not on the `PATH` in the device lab, use `_flutterBin`
(consistent with the rest of the test).
Fixes `flutter` not found.
* `flutter test integration_test` now does not build assets for the host
anymore. `flutter test` builds assets for the host. The `TestCommand` is
now special-case to check for `_isIntegrationTest`.
Fixes `clang++` not found. (It's the compiler for Linux, but we are
running integration tests on an Android device.)
Tests pass locally with:
```
$ cd /Users/dacoharkes/src/flutter/flutter/dev/devicelab && dart bin/test_runner.dart test -t native_assets_android
```
Note:
* The device lab tests are not run on presubmit until
https://github.com/flutter/flutter/issues/170682 is addressed.
* The emulator tests are not run at all atm:
https://github.com/flutter/flutter/issues/170529.
When running on the web-server device hot reload option will default to
disabled when `-d web-server` is also passed.
This is temporary until the app can start correctly with hot reload
enabled.
Issue: https://github.com/dart-lang/sdk/issues/60289
Possible fix for https://github.com/flutter/flutter/issues/169574
It looks like the timeouts seem to be specific to downloading scripts.
Specifically, after a certain point, we no longer download any scripts.
Lowering the number of max concurrent requests seems to avoid Chrome
timing out.
This does a refactor as well to make sure we're piping FileSystem,
Logger, and Platform into devfs_web.dart instead of relying on globals
every time. This also fixes a test issue where we were always passing
`isWindows: false` in some test cases instead of checking for the value.
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
<!-- start_original_pr_link -->
Reverts: flutter/flutter#170374
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jtmcdole
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: "Consistently failed across all 3 executions"
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: dcharkes
<!-- end_original_pr_author -->
<!-- start_reviewers -->
Reviewed By: {vashworth, bkonyi}
<!-- end_reviewers -->
<!-- start_revert_body -->
This change reverts the following previous change:
Closes: https://github.com/flutter/flutter/issues/168961
This PR ensures the build hooks of `dev_dependencies` are run on
`flutter test integration_test`.
`flutter test` already builds dev dependencies. However,
`package:integration_test` is using `flutter assemble` which should not
have dev dependencies included (`flutter build` should not bundle dev
deps).
~~So, this PR adds a build define that's threaded through from `flutter
test` to `flutter assemble`. It's threaded through gradle and xcode via
`BuildInfo` and subsequently read in tool backend where it is added as
an `Environment` define. Finally it is read in the `Target` that builds
the native assets.~~
~~One quirk is `flutter run test integration_test -d flutter-tester`.
(No idea why someone would run that, but it works.) This doesn't spin up
Gradle or XCode. So the environment is set directly.~~
Edit: We use the simpler `kBuildMode` to decide whether to include the
native assets for dev dependencies.
## Testing
* The desktop OSes and `flutter-tester` are tested in
`packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart`.
* iOS simulator, device, and Android device are tested in the device
lab.
* (All tests were added to existing tests, hopefully these don't start
timing out.)
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
<!-- end_revert_body -->
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>