Skip to content

Preprovision Android NDK for flavored builds and reuse matching unflavored NDKs#183555

Merged
auto-submit[bot] merged 12 commits into
flutter:masterfrom
kyungilcho:fix/android-cross-flavor-ndk-build-clean
Apr 13, 2026
Merged

Preprovision Android NDK for flavored builds and reuse matching unflavored NDKs#183555
auto-submit[bot] merged 12 commits into
flutter:masterfrom
kyungilcho:fix/android-cross-flavor-ndk-build-clean

Conversation

@kyungilcho

Copy link
Copy Markdown
Contributor

Flutter currently forces AGP to download the Android NDK by configuring a
synthetic empty CMake project in forceNdkDownload().

For flavored Android apps, that synthetic native configuration can cause AGP
to fold generic CMake tasks across flavors. In practice, building one flavor
can pull native/CMake work from another flavor into the active build.

This change moves NDK provisioning into the Flutter tool flow for flavored app
builds:

  • query the effective ndkVersion with a lightweight Gradle metadata task
  • install the required NDK before the main build when needed
  • pass a preprovisioned NDK property so forceNdkDownload() can return early

To avoid adding unnecessary Gradle overhead to common unflavored builds, the
Flutter tool now also skips forceNdkDownload() when an existing NDK is
already discoverable from the Android SDK or standard Android NDK environment
variables.

This preserves the original goal of ensuring the NDK is available, while
avoiding flavored CMake/native graph contamination.

Manual validation:

  • verified on a minimal flavored Android app that dev builds no longer pull
    prod native/CMake work into the task graph
  • verified locally on a downstream flavored Flutter app for build apk,
    build appbundle, and flutter run

Fixes #183296

@kyungilcho kyungilcho requested a review from a team as a code owner March 12, 2026 00:52
@github-actions github-actions Bot added platform-android Android applications specifically tool Affects the "flutter" command-line tool. See also t: labels. team-android Owned by Android platform team labels Mar 12, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors Android NDK provisioning for flavored builds. It introduces a new Gradle task, printNdkVersion, to query the effective NDK version from the Android project. For flavored builds, the Flutter tool now pre-provisions the required NDK version before the main Gradle build starts. For unflavored builds, it adds an optimization to skip forcing an NDK download if one is already discoverable via environment variables or in the Android SDK directory. This avoids unnecessary Gradle overhead and potential build graph contamination in flavored apps. The changes are accompanied by new unit and integration tests.

Comment on lines +1534 to +1538
for (final Directory ndkDirectory in ndkRoot.listSync().whereType<Directory>()) {
if (_isExistingAndroidNdkDirectory(ndkDirectory)) {
return ndkDirectory.basename;
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The current implementation for finding an existing NDK version iterates through directories in an order that is not guaranteed, which could lead to non-deterministic builds if multiple NDK versions are installed. To ensure that the latest available NDK is always chosen, it would be better to sort the directories by version number in descending order before iterating.

You'll also need to add import '../base/version.dart'; at the top of the file to use the Version class.

  final List<Directory> ndkDirectories = ndkRoot
      .listSync()
      .whereType<Directory>()
      .toList();
  // Sort by version descending to pick the latest valid NDK.
  ndkDirectories.sort((a, b) {
    Version? aVersion;
    Version? bVersion;
    try {
      aVersion = Version.parse(a.basename);
    } on FormatException {
      // Not a valid version string.
    }
    try {
      bVersion = Version.parse(b.basename);
    } on FormatException {
      // Not a valid version string.
    }
    if (aVersion == null && bVersion == null) {
      return 0;
    }
    if (aVersion == null) {
      return 1;
    }
    if (bVersion == null) {
      return -1;
    }
    return bVersion.compareTo(aVersion);
  });

  for (final Directory ndkDirectory in ndkDirectories) {
    if (_isExistingAndroidNdkDirectory(ndkDirectory)) {
      return ndkDirectory.basename;
    }
  }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

done!

@github-actions github-actions Bot removed the CICD Run CI/CD label Mar 17, 2026
@gmackall gmackall added the CICD Run CI/CD label Mar 17, 2026
@gmackall gmackall self-requested a review March 17, 2026 21:09
@github-actions github-actions Bot removed the CICD Run CI/CD label Mar 19, 2026
@kyungilcho

Copy link
Copy Markdown
Contributor Author

I pushed follow-up fixes for lint and tool_tests_general failures! @gmackall

Comment thread packages/flutter_tools/gradle/src/main/kotlin/FlutterPluginUtils.kt
val androidExtension = project.extensions.getByType(AbstractAppExtension::class.java)
project.tasks.register(TASK_PRINT_NDK_VERSION) {
description = "Prints out the configured ndkVersion for this Android project"
doLast {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

FYI @gmackall this will need to be migrated after #182788 lands to the new format for printing work.

@kyungilcho kyungilcho Mar 20, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks. I left the current printing format in place to keep this change scoped to the NDK preprovisioning fix, and I will treat the migration to the new printing format as follow-up once #182788 lands.

gradleProject: Project,
flutterSdkRootPath: String
) {
if (isFlutterAppProject(gradleProject) && shouldSkipForcedNdkDownload(gradleProject)) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the isFlutterAppProject check move inside the shouldSkipForcedNdkDownload?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I ended up removing the combined skip helper in 80e04af rather than moving the app-project check into it. forceNdkDownload() is still invoked from a broader call site, so this kept the existing behavior while making the app-project gate and the individual skip reasons explicit in the method body.

}

@JvmStatic
@JvmName("isInvokingMetadataNdkVersionTask")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I am struggling to understand this method. Why would shouldSkipForcedNdkDownload check to see if we had added our own print task to the list of tasks?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The reason for that check was that printNdkVersion is a metadata-only preflight query. Without the early return, we would still run forceNdkDownload() during that invocation and mutate the synthetic CMake/native path just to answer the metadata query. I split that condition out in 80e04af so the metadata-task skip is explicit instead of being hidden behind shouldSkipForcedNdkDownload().

@kyungilcho kyungilcho requested a review from reidbaker March 20, 2026 02:07
throw TaskResult.failure(
'Not producing external native build output directory in $modifiedPath',
);
if (Directory(modifiedPath).existsSync()) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I dont follow why the not was removed from this failure.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The old test expected forceNdkDownload() to create the synthetic external native build staging dir under build/.cxx. Now that we're using a preprovisioned NDK path, we don't go through that synthetic CMake path at all — so neither android/app/.cxx nor build/.cxx should get created.

}
// Pipe stdout/stderr from Gradle.
return line;
return printOutput ? line : null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@gmackall what do you think about running gradle commands with no output?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is just for the metadata-only printNdkVersion preflight, not regular Gradle builds. Didn't want that preflight output bleeding into the normal build logs. We still surface handled Gradle errors once a matcher wins, but happy to change this if we'd rather keep the preflight output visible too.

@kyungilcho kyungilcho requested a review from reidbaker March 24, 2026 12:12
@reidbaker reidbaker added the CICD Run CI/CD label Mar 24, 2026
@kyungilcho

Copy link
Copy Markdown
Contributor Author

@reidbaker All presubmits are green now, including the latest CICD rerun. If you have any remaining concerns, I’m happy to address them.

@kyungilcho

Copy link
Copy Markdown
Contributor Author

@reidbaker @gmackall All checks are green again, including tree-status. Would you mind taking another look when you have a chance? Happy to address anything else if needed.

reidbaker
reidbaker previously approved these changes Apr 1, 2026
@reidbaker

Copy link
Copy Markdown
Contributor

@gmackall when you approve can you add autosubmit? I would but the pr needs 2 approvals.

@gmackall gmackall left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Mostly looks good to me, added some comments. Sorry for the delay in review

}

String? _getExistingAndroidNdkSkipValue() {
final AndroidSdk? androidSdk = globals.androidSdk;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given we have a handle on the androidSdk here, is there a reason not to use androidSdk.getNdkBinaryPath ?

I suppose we aren't looking for a binary, but probably we can pull the method out which finds the home dir

Directory? findAndroidNdkHomeDir() {

expose that and use it here? I think it would be good to avoid duplicating the logic of how we find the ndk, as they are likely to drift from each other.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch. I pulled the NDK lookup order into AndroidSdk so gradle.dart is not carrying its own copy anymore. Pushed in c1747a4.

gradleExecutablePath: gradleExecutablePath,
buildInfo: buildInfo,
)
: _getExistingAndroidNdkSkipValue();

@gmackall gmackall Apr 7, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Unfortunately we can't skip in this case.

Flutter forces the download of the ndk specifically because, for some reason, AGP only strips debug symbols from native libraries if the ndk is present (otherwise it silently fails and the debug symbols end up in the app delivered to users, making it massive). And unfortunately this behavior only works if the installed ndk version is actually the one specified in your gradle files.

So we could only skip here if we were certain that the existing installed ndk version is the one returned from _getNdkVersion.

I think it would be reasonable to either add that to the check here (in which case we should update the title to reflect that this impacts non flavored builds as well)
or to remove this case and file a follow up issue to consider using this path for non-flavored apps as well.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That makes sense. I will try the stricter route first: only skip for unflavored builds when the installed NDK exactly matches _getNdkVersion(). If that lands cleanly, I will also update the PR title so it reflects the non-flavored impact. If it starts getting too broad, I will drop the unflavored case from this PR and move it into a follow-up.

@kyungilcho kyungilcho Apr 7, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I tightened the unflavored path instead of just checking for any installed NDK. It now only skips the forced download when the configured NDK from printNdkVersion is already installed. I pushed that in aa2afa5 and updated the title to reflect the unflavored behavior too. I also re-ran the updated tests and did a couple of real flutter build checks for both flavored and unflavored repro apps.

@gmackall gmackall left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looks like first invocation takes around 5 seconds, and subsequent take ~600-700 ms on my mac.

I think that's reasonable, if a bit slower than I would hope (maybe we buy some time back from what AGP would have done in the cmake config route). LGTM, thanks for the contribution! I think @reidbaker will need to approve again before we can merge, as we've recently turned on a github feature where new commits dismiss existing reviews as stale.

Also it seems there are internal failures so we will need to add a g3fix to get this landed, though you won't need to make any changes for that (just might delay merging)

@gmackall

Copy link
Copy Markdown
Member

Looks like the g3fix resolves the issues, just need to get it approved and this should be good to land

@gmackall gmackall added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 13, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Apr 13, 2026
Merged via the queue into flutter:master with commit fb3b552 Apr 13, 2026
165 of 166 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 13, 2026
@kyungilcho kyungilcho deleted the fix/android-cross-flavor-ndk-build-clean branch April 14, 2026 05:32
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 14, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 14, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Apr 14, 2026
flutter/flutter@2fa45e0...c1b14e9

2026-04-14 15619084+vashworth@users.noreply.github.com Rebuild flutter tool skill (flutter/flutter#184975)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0851d988db03 to 4c382df6a25a (1 revision) (flutter/flutter#185025)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from 5504504b38c2 to ee5afcef0596 (1 revision) (flutter/flutter#185024)
2026-04-14 dacoharkes@google.com [ci] Split up integration.shard record_use_test.dart (flutter/flutter#185022)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from d34c84df4c37 to 0851d988db03 (3 revisions) (flutter/flutter#185012)
2026-04-14 dacoharkes@google.com [record_use] Add recorded uses to link hooks (flutter/flutter#184869)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0e98a9c635bb to d34c84df4c37 (5 revisions) (flutter/flutter#185009)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from ef28089d6533 to 5504504b38c2 (3 revisions) (flutter/flutter#185008)
2026-04-14 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from K_2AkZL3Drs6cGE1q... to rB8LAuZL_DwHMssTU... (flutter/flutter#185007)
2026-04-14 rmacnak@google.com [fuchsia] Replace ambient-replace-as-executable with VmexResource. (flutter/flutter#184967)
2026-04-13 chinmaygarde@google.com [Impeller] Commands that don't specify their own viewports get the viewport of the render pass. (flutter/flutter#177473)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from bc1df263ff3f to 0e98a9c635bb (1 revision) (flutter/flutter#184995)
2026-04-13 737941+loic-sharma@users.noreply.github.com Update autosubmit guide with the emergency label (flutter/flutter#184993)
2026-04-13 69043738+aNOOBisTheGod@users.noreply.github.com [flutter_tools] Cache pubspec reads and share PackageGraph/PackageConfig across workspace packages during pub get post-processing (flutter/flutter#184528)
2026-04-13 15619084+vashworth@users.noreply.github.com Fix codesign verification test for SwiftPM Add to App (flutter/flutter#184980)
2026-04-13 87962825+kyungilcho@users.noreply.github.com Preprovision Android NDK for flavored builds and reuse matching unflavored NDKs (flutter/flutter#183555)
2026-04-13 15619084+vashworth@users.noreply.github.com Reland "Disable async mode with LLDB" (flutter/flutter#184970)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from 55ddd6bb8be5 to bc1df263ff3f (6 revisions) (flutter/flutter#184968)
2026-04-13 matej.knopp@gmail.com Expose platform specific handles for multi-window API (flutter/flutter#184662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC boetger@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
master-wayne7 pushed a commit to master-wayne7/flutter that referenced this pull request Apr 15, 2026
…vored NDKs (flutter#183555)

Flutter currently forces AGP to download the Android NDK by configuring
a
synthetic empty CMake project in `forceNdkDownload()`.

For flavored Android apps, that synthetic native configuration can cause
AGP
to fold generic CMake tasks across flavors. In practice, building one
flavor
can pull native/CMake work from another flavor into the active build.

This change moves NDK provisioning into the Flutter tool flow for
flavored app
builds:
- query the effective `ndkVersion` with a lightweight Gradle metadata
task
- install the required NDK before the main build when needed
- pass a preprovisioned NDK property so `forceNdkDownload()` can return
early

To avoid adding unnecessary Gradle overhead to common unflavored builds,
the
Flutter tool now also skips `forceNdkDownload()` when an existing NDK is
already discoverable from the Android SDK or standard Android NDK
environment
variables.

This preserves the original goal of ensuring the NDK is available, while
avoiding flavored CMake/native graph contamination.

Manual validation:
- verified on a minimal flavored Android app that `dev` builds no longer
pull
  `prod` native/CMake work into the task graph
- verified locally on a downstream flavored Flutter app for `build apk`,
  `build appbundle`, and `flutter run`

Fixes flutter#183296

---------

Co-authored-by: Gray Mackall <34871572+gmackall@users.noreply.github.com>
mbcorona pushed a commit to mbcorona/flutter that referenced this pull request Apr 15, 2026
…vored NDKs (flutter#183555)

Flutter currently forces AGP to download the Android NDK by configuring
a
synthetic empty CMake project in `forceNdkDownload()`.

For flavored Android apps, that synthetic native configuration can cause
AGP
to fold generic CMake tasks across flavors. In practice, building one
flavor
can pull native/CMake work from another flavor into the active build.

This change moves NDK provisioning into the Flutter tool flow for
flavored app
builds:
- query the effective `ndkVersion` with a lightweight Gradle metadata
task
- install the required NDK before the main build when needed
- pass a preprovisioned NDK property so `forceNdkDownload()` can return
early

To avoid adding unnecessary Gradle overhead to common unflavored builds,
the
Flutter tool now also skips `forceNdkDownload()` when an existing NDK is
already discoverable from the Android SDK or standard Android NDK
environment
variables.

This preserves the original goal of ensuring the NDK is available, while
avoiding flavored CMake/native graph contamination.

Manual validation:
- verified on a minimal flavored Android app that `dev` builds no longer
pull
  `prod` native/CMake work into the task graph
- verified locally on a downstream flavored Flutter app for `build apk`,
  `build appbundle`, and `flutter run`

Fixes flutter#183296

---------

Co-authored-by: Gray Mackall <34871572+gmackall@users.noreply.github.com>
@b-luk

b-luk commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

@kyungilcho This looks like it caused a regression in our compile time benchmarks. Is this expected?

https://flutter-flutter-perf.luci.app/e/?begin=1775708186&enable_chart_tooltip=true&end=1776797547&keys=X6070d79e7783ac1053acc5c01e4b9be6&plotSummary=true&use_titles=true&xbaroffset=2807407

The flutter_gallery_win__compile/intel/win/release_initial_compile_millis metric didn't change significantly. If you uncheck that metric, you can see all the other results had a significant change at this commit.

cc @flar

@gmackall

gmackall commented Apr 22, 2026

Copy link
Copy Markdown
Member

Hmm this seems like a more significant increase than expected on windows (and for compiling after editing). Unfortunately I think we should revert this and plan to reland with the approach of only using this pre-provisioning approach when building with flavors.

Sorry @kyungilcho I only tested on my mac and did not expect the increase to be so significant on windows (it's a 40+% increase in first compile time)

@gmackall

Copy link
Copy Markdown
Member

Reason for revert: larger than expected impact on build times, particularly on windows and for builds after editing

@gmackall gmackall added the revert Autorevert PR (with "Reason for revert:" comment) label Apr 22, 2026
@auto-submit

auto-submit Bot commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Time to revert pull request flutter/flutter/183555 has elapsed.
You need to open the revert manually and process as a regular pull request.

@auto-submit auto-submit Bot removed the revert Autorevert PR (with "Reason for revert:" comment) label Apr 22, 2026
ahmedm-gh pushed a commit to ahmedm-gh/flutter that referenced this pull request Apr 23, 2026
flutter#185439)

…ng unflavored NDKs (flutter#183555)"

This reverts commit fb3b552.

See context starting at
flutter#183555 (comment)

This will need a separate g3fix, as the original pr had one
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11506)

flutter/flutter@2fa45e0...c1b14e9

2026-04-14 15619084+vashworth@users.noreply.github.com Rebuild flutter tool skill (flutter/flutter#184975)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0851d988db03 to 4c382df6a25a (1 revision) (flutter/flutter#185025)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from 5504504b38c2 to ee5afcef0596 (1 revision) (flutter/flutter#185024)
2026-04-14 dacoharkes@google.com [ci] Split up integration.shard record_use_test.dart (flutter/flutter#185022)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from d34c84df4c37 to 0851d988db03 (3 revisions) (flutter/flutter#185012)
2026-04-14 dacoharkes@google.com [record_use] Add recorded uses to link hooks (flutter/flutter#184869)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0e98a9c635bb to d34c84df4c37 (5 revisions) (flutter/flutter#185009)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from ef28089d6533 to 5504504b38c2 (3 revisions) (flutter/flutter#185008)
2026-04-14 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from K_2AkZL3Drs6cGE1q... to rB8LAuZL_DwHMssTU... (flutter/flutter#185007)
2026-04-14 rmacnak@google.com [fuchsia] Replace ambient-replace-as-executable with VmexResource. (flutter/flutter#184967)
2026-04-13 chinmaygarde@google.com [Impeller] Commands that don't specify their own viewports get the viewport of the render pass. (flutter/flutter#177473)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from bc1df263ff3f to 0e98a9c635bb (1 revision) (flutter/flutter#184995)
2026-04-13 737941+loic-sharma@users.noreply.github.com Update autosubmit guide with the emergency label (flutter/flutter#184993)
2026-04-13 69043738+aNOOBisTheGod@users.noreply.github.com [flutter_tools] Cache pubspec reads and share PackageGraph/PackageConfig across workspace packages during pub get post-processing (flutter/flutter#184528)
2026-04-13 15619084+vashworth@users.noreply.github.com Fix codesign verification test for SwiftPM Add to App (flutter/flutter#184980)
2026-04-13 87962825+kyungilcho@users.noreply.github.com Preprovision Android NDK for flavored builds and reuse matching unflavored NDKs (flutter/flutter#183555)
2026-04-13 15619084+vashworth@users.noreply.github.com Reland "Disable async mode with LLDB" (flutter/flutter#184970)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from 55ddd6bb8be5 to bc1df263ff3f (6 revisions) (flutter/flutter#184968)
2026-04-13 matej.knopp@gmail.com Expose platform specific handles for multi-window API (flutter/flutter#184662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC boetger@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Istiak-Ahmed78 pushed a commit to Istiak-Ahmed78/packages that referenced this pull request Jun 19, 2026
…r#11506)

flutter/flutter@2fa45e0...c1b14e9

2026-04-14 15619084+vashworth@users.noreply.github.com Rebuild flutter tool skill (flutter/flutter#184975)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0851d988db03 to 4c382df6a25a (1 revision) (flutter/flutter#185025)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from 5504504b38c2 to ee5afcef0596 (1 revision) (flutter/flutter#185024)
2026-04-14 dacoharkes@google.com [ci] Split up integration.shard record_use_test.dart (flutter/flutter#185022)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from d34c84df4c37 to 0851d988db03 (3 revisions) (flutter/flutter#185012)
2026-04-14 dacoharkes@google.com [record_use] Add recorded uses to link hooks (flutter/flutter#184869)
2026-04-14 engine-flutter-autoroll@skia.org Roll Skia from 0e98a9c635bb to d34c84df4c37 (5 revisions) (flutter/flutter#185009)
2026-04-14 engine-flutter-autoroll@skia.org Roll Dart SDK from ef28089d6533 to 5504504b38c2 (3 revisions) (flutter/flutter#185008)
2026-04-14 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from K_2AkZL3Drs6cGE1q... to rB8LAuZL_DwHMssTU... (flutter/flutter#185007)
2026-04-14 rmacnak@google.com [fuchsia] Replace ambient-replace-as-executable with VmexResource. (flutter/flutter#184967)
2026-04-13 chinmaygarde@google.com [Impeller] Commands that don't specify their own viewports get the viewport of the render pass. (flutter/flutter#177473)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from bc1df263ff3f to 0e98a9c635bb (1 revision) (flutter/flutter#184995)
2026-04-13 737941+loic-sharma@users.noreply.github.com Update autosubmit guide with the emergency label (flutter/flutter#184993)
2026-04-13 69043738+aNOOBisTheGod@users.noreply.github.com [flutter_tools] Cache pubspec reads and share PackageGraph/PackageConfig across workspace packages during pub get post-processing (flutter/flutter#184528)
2026-04-13 15619084+vashworth@users.noreply.github.com Fix codesign verification test for SwiftPM Add to App (flutter/flutter#184980)
2026-04-13 87962825+kyungilcho@users.noreply.github.com Preprovision Android NDK for flavored builds and reuse matching unflavored NDKs (flutter/flutter#183555)
2026-04-13 15619084+vashworth@users.noreply.github.com Reland "Disable async mode with LLDB" (flutter/flutter#184970)
2026-04-13 engine-flutter-autoroll@skia.org Roll Skia from 55ddd6bb8be5 to bc1df263ff3f (6 revisions) (flutter/flutter#184968)
2026-04-13 matej.knopp@gmail.com Expose platform specific handles for multi-window API (flutter/flutter#184662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC boetger@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD platform-android Android applications specifically team-android Owned by Android platform team tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Android: building one flavor also runs compileFlutterBuild for another flavor

4 participants