)]}'
{
  "commit": "2a225c7cdadfeaf23b9e39dceaf18b2e8e3eac60",
  "tree": "99736e2c5a10c07ffcb5ab1c649c45477f6bf51a",
  "parents": [
    "7ebbe8e5f2bef342f93751ddddf9074020b7e4ef"
  ],
  "author": {
    "name": "Daco Harkes",
    "email": "dacoharkes@google.com",
    "time": "Wed Nov 27 12:03:19 2024 +0100"
  },
  "committer": {
    "name": "dart-internal-monorepo",
    "email": "dart-internal-monorepo@dart-ci-internal.iam.gserviceaccount.com",
    "time": "Wed Nov 27 03:10:17 2024 -0800"
  },
  "message": "[native assets] Create `NativeAssetsManifest.json` instead of kernel embedding (#159322)\n\nThis PR introduces a `NativeAssetsManifest.json` next to the\n`AssetManifest.bin` and `FontManifest.json`. This removes the need for\nembedding the native assets mapping inside the kernel file and enables\ndecoupling native assets building and bundling from the kernel\ncompilation in flutter tools. This means `flutter run` no longer does a\ndry run of `hook/build.dart` hooks.\n\n(It also means all isolate groups will have the same native assets.\nHowever, since Flutter does not support `Isolate.spawnUri` from kernel\nfiles, this is not a regression.)\n\nImplementation details:\n\n* g3 is still using kernel embedding.\nhttps://github.com/flutter/flutter/pull/142016 introduced an argument to\nembed a `native_assets.yaml` inside `flutter attach` and `flutter run`\n(the outer flutter process), but it is not used in `flutter assemble`\n(the inner process when doing `flutter run`). So, those arguments need\nto still be respected. However, all other logic related to embedding a\nyaml encoding in the kernel file has been removed.\n* All dry-run logic has been removed. 🎉\n* The `KernelSnapshot` target no longer depends on the\n`InstallCodeAssets` target. Instead, the various OS-specific\n\"BundleAsset\" targets now depend on the `InstallCodeAssets` target. The\n`InstallCodeAssets` invokes the build hooks and produces the\n`NativeAssetsManifest.json`. The various \"BundleAsset\" commands\nsynchronize the `NativeAssetsManifest.json` to the app bundle.\n* `InstallCodeAssets` produces a `native_assets.json`, which is renamed\nto `NativeAssetsManifest.json` in the various \"Bundle\" targets. This\nmeans that all unit tests of the \"Bundle\" targets now need to create\nthis file. (Similar to how `app.dill` is expected to exist because\n`KernelSnapshot` is a dependency of the \"Bundle\" targets.)\n* Because dynamic libraries need to be code signed (at least on iOS and\nMacOS), the bundling of the dylibs is _not_ migrated to reuse\n`_updateDevFS` (which is used for ordinary assets). Only the 2nd and 3rd\ninvocation of `flutter assemble` from `xcodebuild` has access to the\ncode signing identity.\n\nRelevant tests:\n\n* test/integration.shard/isolated/native_assets_test.dart - runs\n`flutter run` with native assets including hot restart and hot reload.\n\nTODO:\n\n* Undo engine-roll in this PR after engine has rolled in.\n\nIssue:\n\n* https://github.com/flutter/flutter/issues/154425\n\nRelated PRs:\n\n* https://dart-review.googlesource.com/c/sdk/+/388161\n* https://github.com/flutter/engine/pull/56727\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant documentation (doc comments with `///`).\n- [x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\nhttps://dart.googlesource.com/external/github.com/flutter/flutter/+/4aa2caef20a9d4c930a53ad04f0791e907b63815\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5d7442f751232e2d667cdf9add102cde1a1a5965",
      "old_mode": 33188,
      "old_path": "DEPS",
      "new_id": "305aab691bc8b4aee33c9eac47107ab0d61a91a8",
      "new_mode": 33188,
      "new_path": "DEPS"
    },
    {
      "type": "modify",
      "old_id": "a1be9c15626f45533b024cdcd8aad48c69977136",
      "old_mode": 33188,
      "old_path": "commits.json",
      "new_id": "374fe5da61a8dbb7d5a3042efb9e646c4312cd5a",
      "new_mode": 33188,
      "new_path": "commits.json"
    }
  ]
}
