Skip to content

Reland "[Android] Add mechanism for setting Android engine flags via Android manifest (take 2)"#182522

Merged
auto-submit[bot] merged 37 commits intoflutter:masterfrom
camsim99:reland_flags
Mar 18, 2026
Merged

Reland "[Android] Add mechanism for setting Android engine flags via Android manifest (take 2)"#182522
auto-submit[bot] merged 37 commits intoflutter:masterfrom
camsim99:reland_flags

Conversation

@camsim99
Copy link
Contributor

@camsim99 camsim99 commented Feb 18, 2026

Overview

Re-lands #181632 which TLDR does the following:

Same old same old changes from original PR

New changes/fixes

Note

This re-land was required because when previously submitted, it caused b/483299339. I have confirmed that this bug has been fixed in this PR; see go/flutter-android-setting-flags-in-manifest-perf-comparison for A/B test results with the previous version of this PR (#181632) and commit d6d4a07 of this PR.

  • [Critical change] To fix the bug caught by b/483299339, --merged-platform-ui-thread flag is added to FlutterEngineFlags
  • [Behavior change, not critical] To avoid more bugs like b/483299339, FlutterLoader allows unrecognized flags specified by the command line or Intent extras to be used to initialize the engine for now (same behavior as before my original change but I plan to secure this in the future; see [Android] Only allow known engine flags specified on the command line #182557)
  • [Small refactor] To speed up manifest argument processing time, FlutterLoader loops through all recognized FlutterEngineFlags to check if they are present in an application's manifest versus looping through all metadata in an application's manifest and looking for recognized FlutterEngineFlags (small improvement for apps with large manifests)
  • [Small refactor] To speed up command line argument processing time, FlutterLoader processes the --aot-shared-library-name flag in the same loop as the other flags, reducing the number of loops ensureInitializationComplete has to do (minimal improvement perf-wise but kept it in because it's more readable to me)

Full description

(Mostly copied from #181632)

Note

This PR is based on conversation & feedback on go/flutter-android-harden-engine-shell-arguments.

Adds a mechanism for setting Android engine flags via the manifest. If a flag is specified on the command line and in manifest metadata, the value specified on the command line will take precedence. Documentation is added on this mechanism

Additionally, this PR removes the exposure of--cache-sksl command line flag as per https://github.com/flutter/flutter/issues/140310#issuecomment-2708459007.

Additionally, this PR adds documentation for the only two supported ways of setting engine flags moving forward -- via the command line or manifest. The Intent mechanism will be removed when #180686 is completed (intended to be a follow up to this PR).

As the unit tests in this PR only cover setting flags via manifest in debug mode, I will follow up this PR with an integration test to test that flags are appropriately respected/ignored in release mode. See #178383 for my currently working but WIP draft.

Part of #172553.

Follow up work:

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

camsim99 and others added 16 commits February 10, 2026 11:06
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…manifest (take 2) (flutter#181632)

A continuation of flutter#177127.
Copying from there:

# Overview

> [!NOTE]  
> This PR is based on conversation & feedback on
go/flutter-android-harden-engine-shell-arguments.

Adds a mechanism for setting Android engine flags via the manifest. If a
flag is specified on the command line and in manifest metadata, the
value specified on the command line will take precedence. Documentation
is added on this mechanism

Additionally, this PR removes the exposure of`--cache-sksl` command line
flag as per
[https://github.com/flutter/flutter/issues/140310#issuecomment-2708459007](https://www.google.com/url?q=https://github.com/flutter/flutter/issues/140310%23issuecomment-2708459007&sa=D&source=docs&ust=1761156167162464&usg=AOvVaw3a8ubXTtv3apknY2-P9dKe).

Additionally, this PR adds documentation for the only two supported ways
of setting engine flags moving forward -- via the command line or
manifest. The `Intent` mechanism will be removed when
flutter#180686 is completed (intended
to be a follow up to this PR).

As the unit tests in this PR only cover setting flags via manifest in
debug mode, I will follow up this PR with an integration test to test
that flags are appropriately respected/ignored in release mode. See
flutter#178383 for my currently working
but WIP draft.

Part of flutter#172553.

# Follow up work:

## Add integration test for this new added mechanism
This will land as an immediate follow-up to this PR. WIP in
flutter#178383.

## Remove support for setting shell arguments via `Intent`
This task will be a follow up to this work + the integration test
landing, and will complete work for
flutter#172553. See
flutter#180686 for details.

## 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].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- 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
@github-actions github-actions bot added platform-android Android applications specifically tool Affects the "flutter" command-line tool. See also t: labels. engine flutter/engine related. See also e: labels. d: examples Sample code and demos team-android Owned by Android platform team team-engine Owned by Engine team d: docs/ flutter/flutter/docs, for contributors labels Feb 18, 2026
@github-actions github-actions bot removed the tool Affects the "flutter" command-line tool. See also t: labels. label Feb 19, 2026
@camsim99 camsim99 marked this pull request as ready for review February 19, 2026 21:34
@camsim99 camsim99 requested a review from a team as a code owner February 19, 2026 21:34
@camsim99 camsim99 requested a review from mboetger March 16, 2026 21:08
@camsim99
Copy link
Contributor Author

@mboetger do you mind taking another look at this? Your review was dismissed, but I've made no new behavioral changes.

cc @gmackall if you're interested in taking another look since the main change that I made since your last review was refactoring the HCPP flag to work with my approach to loading flags-- 97c27e9).

@camsim99 camsim99 added CICD Run CI/CD and removed CICD Run CI/CD labels Mar 16, 2026
// TODO(camsim99): Remove support for these flags:
// https://github.com/flutter/flutter/issues/179276.
// AndroidManifest.xml metadata keys for setting internal respective Flutter configuration values.
public static final String NETWORK_POLICY_METADATA_KEY = "io.flutter.network-policy";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just fyi, this is not connected to anything.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I filed #179276 to remember to remove it!

@camsim99 camsim99 requested review from gmackall and mboetger March 16, 2026 21:39
@github-actions github-actions bot removed the CICD Run CI/CD label Mar 16, 2026
@camsim99 camsim99 added the CICD Run CI/CD label Mar 16, 2026
Copy link
Contributor

@mboetger mboetger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@camsim99 camsim99 added the autosubmit Merge PR when tree becomes green via auto submit App label Mar 17, 2026
@auto-submit auto-submit bot added this pull request to the merge queue Mar 17, 2026
Merged via the queue into flutter:master with commit 994b73f Mar 18, 2026
188 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD d: docs/ flutter/flutter/docs, for contributors d: examples Sample code and demos engine flutter/engine related. See also e: labels. platform-android Android applications specifically team-android Owned by Android platform team team-engine Owned by Engine team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants