[native assets] Roll dependencies (#165574)

Updating the dart-lang/native dependencies to the ones published today.
diff --git a/dev/integration_tests/link_hook/pubspec.yaml b/dev/integration_tests/link_hook/pubspec.yaml
index 7942fb1..7c1698f 100644
--- a/dev/integration_tests/link_hook/pubspec.yaml
+++ b/dev/integration_tests/link_hook/pubspec.yaml
@@ -7,8 +7,8 @@
 
 dependencies:
   logging: 1.3.0
-  native_assets_cli: 0.11.0
-  native_toolchain_c: 0.8.0
+  native_assets_cli: 0.12.0
+  native_toolchain_c: 0.9.0
 
   async: 2.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
   collection: 1.19.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -68,4 +68,4 @@
   webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
   yaml_edit: 2.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
 
-# PUBSPEC CHECKSUM: 4038
+# PUBSPEC CHECKSUM: c03a
diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart
index 77465d9..b960e69 100644
--- a/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart
+++ b/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart
@@ -88,7 +88,7 @@
   }
   return KernelAsset(
     id: asset.id,
-    target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+    target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
     path: kernelAssetPath,
   );
 }
diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart
index c041f04..703b93e 100644
--- a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart
+++ b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart
@@ -53,7 +53,7 @@
     idToPath[asset.id] = path;
     result[asset] = KernelAsset(
       id: asset.id,
-      target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+      target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
       path: path,
     );
   }
@@ -78,7 +78,7 @@
   }
   return KernelAsset(
     id: asset.id,
-    target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+    target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
     path: kernelAssetPath,
   );
 }
diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart
index e8257a2..89c511b 100644
--- a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart
+++ b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart
@@ -52,7 +52,7 @@
     idToPath[asset.id] = path;
     result[asset] = KernelAsset(
       id: asset.id,
-      target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+      target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
       path: path,
     );
   }
@@ -91,7 +91,7 @@
   }
   return KernelAsset(
     id: asset.id,
-    target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+    target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
     path: kernelAssetPath,
   );
 }
diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart
index 6a8d5f7..1f30b9d 100644
--- a/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart
+++ b/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart
@@ -154,23 +154,13 @@
 
   /// Runs all [packagesWithNativeAssets] `build.dart`.
   Future<BuildResult?> build({
-    required List<String> buildAssetTypes,
-    required BuildInputValidator inputValidator,
-    required BuildInputCreator inputCreator,
-    required BuildValidator buildValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required bool linkingEnabled,
   });
 
   /// Runs all [packagesWithNativeAssets] `link.dart`.
   Future<LinkResult?> link({
-    required List<String> buildAssetTypes,
-    required LinkInputValidator inputValidator,
-    required LinkInputCreator inputCreator,
-    required LinkValidator linkValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required BuildResult buildResult,
   });
 
@@ -246,42 +236,18 @@
 
   @override
   Future<BuildResult?> build({
-    required List<String> buildAssetTypes,
-    required BuildInputValidator inputValidator,
-    required BuildInputCreator inputCreator,
-    required BuildValidator buildValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required bool linkingEnabled,
   }) {
-    return _buildRunner.build(
-      buildAssetTypes: buildAssetTypes,
-      inputCreator: inputCreator,
-      inputValidator: inputValidator,
-      buildValidator: buildValidator,
-      applicationAssetValidator: applicationAssetValidator,
-      linkingEnabled: linkingEnabled,
-    );
+    return _buildRunner.build(linkingEnabled: linkingEnabled, extensions: extensions);
   }
 
   @override
   Future<LinkResult?> link({
-    required List<String> buildAssetTypes,
-    required LinkInputValidator inputValidator,
-    required LinkInputCreator inputCreator,
-    required LinkValidator linkValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required BuildResult buildResult,
   }) {
-    return _buildRunner.link(
-      buildAssetTypes: buildAssetTypes,
-      inputCreator: inputCreator,
-      inputValidator: inputValidator,
-      linkValidator: linkValidator,
-      applicationAssetValidator: applicationAssetValidator,
-      buildResult: buildResult,
-    );
+    return _buildRunner.link(extensions: extensions, buildResult: buildResult);
   }
 
   @override
@@ -451,7 +417,7 @@
   }
   return KernelAsset(
     id: asset.id,
-    target: Target.fromArchitectureAndOS(asset.architecture!, asset.os),
+    target: Target.fromArchitectureAndOS(asset.architecture, asset.os),
     path: kernelAssetPath,
   );
 }
@@ -601,30 +567,17 @@
       targetOS == OS.macOS ? MacOSCodeConfig(targetVersion: targetMacOSVersion) : null;
   for (final Architecture architecture in architectures) {
     final BuildResult? buildResult = await buildRunner.build(
-      buildAssetTypes: <String>[CodeAsset.type],
-      inputCreator:
-          () =>
-              BuildInputBuilder()
-                ..config.setupCode(
-                  targetArchitecture: architecture,
-                  linkModePreference: LinkModePreference.dynamic,
-                  cCompiler: cCompilerConfig,
-                  targetOS: targetOS!,
-                  android: androidConfig,
-                  iOS: iosConfig,
-                  macOS: macOSConfig,
-                ),
-      inputValidator:
-          (BuildInput config) async => <String>[...await validateCodeAssetBuildInput(config)],
-      buildValidator:
-          (BuildInput config, BuildOutput output) async => <String>[
-            ...await validateCodeAssetBuildOutput(config, output),
-          ],
-      applicationAssetValidator:
-          (List<EncodedAsset> assets) async => <String>[
-            ...await validateCodeAssetInApplication(assets),
-          ],
-      workingDirectory: projectUri,
+      extensions: <ProtocolExtension>[
+        CodeAssetExtension(
+          targetArchitecture: architecture,
+          linkModePreference: LinkModePreference.dynamic,
+          cCompiler: cCompilerConfig,
+          targetOS: targetOS!,
+          android: androidConfig,
+          iOS: iosConfig,
+          macOS: macOSConfig,
+        ),
+      ],
       linkingEnabled: linkingEnabled,
     );
     if (buildResult == null) {
@@ -635,30 +588,17 @@
       assets.addAll(buildResult.encodedAssets);
     } else {
       final LinkResult? linkResult = await buildRunner.link(
-        buildAssetTypes: <String>[CodeAsset.type],
-        inputCreator:
-            () =>
-                LinkInputBuilder()
-                  ..config.setupCode(
-                    targetArchitecture: architecture,
-                    linkModePreference: LinkModePreference.dynamic,
-                    cCompiler: cCompilerConfig,
-                    targetOS: targetOS!,
-                    android: androidConfig,
-                    iOS: iosConfig,
-                    macOS: macOSConfig,
-                  ),
-        inputValidator:
-            (LinkInput config) async => <String>[...await validateCodeAssetLinkInput(config)],
-        linkValidator:
-            (LinkInput config, LinkOutput output) async => <String>[
-              ...await validateCodeAssetLinkOutput(config, output),
-            ],
-        applicationAssetValidator:
-            (List<EncodedAsset> assets) async => <String>[
-              ...await validateCodeAssetInApplication(assets),
-            ],
-        workingDirectory: projectUri,
+        extensions: <ProtocolExtension>[
+          CodeAssetExtension(
+            targetArchitecture: architecture,
+            linkModePreference: LinkModePreference.dynamic,
+            cCompiler: cCompilerConfig,
+            targetOS: targetOS,
+            android: androidConfig,
+            iOS: iosConfig,
+            macOS: macOSConfig,
+          ),
+        ],
         buildResult: buildResult,
       );
       if (linkResult == null) {
diff --git a/packages/flutter_tools/lib/src/update_packages_pins.dart b/packages/flutter_tools/lib/src/update_packages_pins.dart
index d16515f..6157159 100644
--- a/packages/flutter_tools/lib/src/update_packages_pins.dart
+++ b/packages/flutter_tools/lib/src/update_packages_pins.dart
@@ -25,9 +25,9 @@
   'flutter_template_images': '5.0.0', // Must always exactly match flutter_tools template.
   'google_mobile_ads': '5.1.0', // https://github.com/flutter/flutter/issues/156912
   'native_assets_builder':
-      '0.11.1', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
+      '0.12.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
   'native_assets_cli':
-      '0.11.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
+      '0.12.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
   'material_color_utilities': '0.11.1', // Keep pinned to latest until 1.0.0.
   'leak_tracker': '10.0.9', // https://github.com/flutter/devtools/issues/3951
   'leak_tracker_testing': '3.0.1', // https://github.com/flutter/devtools/issues/3951
diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml
index fe0ae13..ffdf9ff 100644
--- a/packages/flutter_tools/pubspec.yaml
+++ b/packages/flutter_tools/pubspec.yaml
@@ -55,8 +55,8 @@
   unified_analytics: 7.0.1
 
   graphs: 2.3.2
-  native_assets_builder: 0.11.1
-  native_assets_cli: 0.11.0
+  native_assets_builder: 0.12.0
+  native_assets_cli: 0.12.0
 
   # We depend on very specific internal implementation details of the
   # 'test' package, which change between versions, so when upgrading
@@ -122,4 +122,4 @@
   # Exclude this package from the hosted API docs.
   nodoc: true
 
-# PUBSPEC CHECKSUM: 776d
+# PUBSPEC CHECKSUM: f46e
diff --git a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl
index 9249f00..a3e9abd 100644
--- a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl
+++ b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl
@@ -8,8 +8,8 @@
 
 dependencies:
   logging: ^1.2.0
-  native_assets_cli: ^0.11.0
-  native_toolchain_c: ^0.8.0
+  native_assets_cli: ^0.12.0
+  native_toolchain_c: ^0.9.0
 
 dev_dependencies:
   ffi: ^2.1.3
diff --git a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart
index 5bc0f27..132ef19 100644
--- a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart
+++ b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart
@@ -36,18 +36,13 @@
 
   @override
   Future<BuildResult?> build({
-    required List<String> buildAssetTypes,
-    required BuildInputValidator inputValidator,
-    required BuildInputCreator inputCreator,
-    required BuildValidator buildValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required bool linkingEnabled,
   }) async {
     BuildResult? result = buildResult;
     for (final String package in packagesWithNativeAssetsResult) {
-      final BuildInputBuilder configBuilder =
-          inputCreator()
+      final BuildInputBuilder input =
+          BuildInputBuilder()
             ..setupShared(
               packageRoot: Uri.parse('$package/'),
               packageName: package,
@@ -56,9 +51,11 @@
               outputFile: Uri.file('output.json'),
             )
             ..setupBuildInput()
-            ..config.setupShared(buildAssetTypes: buildAssetTypes)
-            ..config.setupBuild(dryRun: false, linkingEnabled: linkingEnabled);
-      final BuildInput buildConfig = BuildInput(configBuilder.json);
+            ..config.setupBuild(linkingEnabled: linkingEnabled);
+      for (final ProtocolExtension extension in extensions) {
+        extension.setupBuildInput(input);
+      }
+      final BuildInput buildConfig = BuildInput(input.json);
       if (onBuild != null) {
         result = onBuild!(buildConfig);
       }
@@ -69,18 +66,13 @@
 
   @override
   Future<LinkResult?> link({
-    required List<String> buildAssetTypes,
-    required LinkInputCreator inputCreator,
-    required LinkInputValidator inputValidator,
-    required LinkValidator linkValidator,
-    required ApplicationAssetValidator applicationAssetValidator,
-    required Uri workingDirectory,
+    required List<ProtocolExtension> extensions,
     required BuildResult buildResult,
   }) async {
     LinkResult? result = linkResult;
     for (final String package in packagesWithNativeAssetsResult) {
-      final LinkInputBuilder configBuilder =
-          inputCreator()
+      final LinkInputBuilder input =
+          LinkInputBuilder()
             ..setupShared(
               packageRoot: Uri.parse('$package/'),
               packageName: package,
@@ -88,9 +80,11 @@
               outputDirectoryShared: Uri.parse('build-out-dir-shared'),
               outputFile: Uri.file('output.json'),
             )
-            ..setupLink(assets: buildResult.encodedAssets, recordedUsesFile: null)
-            ..config.setupShared(buildAssetTypes: buildAssetTypes);
-      final LinkInput buildConfig = LinkInput(configBuilder.json);
+            ..setupLink(assets: buildResult.encodedAssets, recordedUsesFile: null);
+      for (final ProtocolExtension extension in extensions) {
+        extension.setupLinkInput(input);
+      }
+      final LinkInput buildConfig = LinkInput(input.json);
       if (onLink != null) {
         result = onLink!(buildConfig);
       }