[flutter_tools] split host artifacts out of Artifacts (#80876)

diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 05d1779..bb17c28 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -107,7 +107,7 @@
       // devtools source code.
       DevtoolsLauncher: () => DevtoolsServerLauncher(
         processManager: globals.processManager,
-        pubExecutable: globals.artifacts.getArtifactPath(Artifact.pubExecutable),
+        pubExecutable: globals.artifacts.getHostArtifact(HostArtifact.pubExecutable).path,
         logger: globals.logger,
         platform: globals.platform,
         persistentToolState: globals.persistentToolState,
diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart
index d27fc1c..43adfbd 100644
--- a/packages/flutter_tools/lib/src/artifacts.dart
+++ b/packages/flutter_tools/lib/src/artifacts.dart
@@ -4,6 +4,7 @@
 
 // @dart = 2.8
 
+import 'package:file/memory.dart';
 import 'package:meta/meta.dart';
 import 'package:process/process.dart';
 
@@ -32,42 +33,6 @@
   platformLibrariesJson,
   flutterPatchedSdkPath,
   frontendServerSnapshotForEngineDartSdk,
-  /// The root directory of the dart SDK.
-  engineDartSdkPath,
-  /// The dart binary used to execute any of the required snapshots.
-  engineDartBinary,
-  /// The dart snapshot of the dart2js compiler.
-  dart2jsSnapshot,
-  /// The dart snapshot of the dartdev compiler.
-  dartdevcSnapshot,
-  /// The dart snpashot of the kernel worker compiler.
-  kernelWorkerSnapshot,
-  /// The root of the web implementation of the dart SDK.
-  flutterWebSdk,
-  /// The libraries JSON file for web release builds.
-  flutterWebLibrariesJson,
-  /// The summary dill for the dartdevc target.
-  webPlatformKernelDill,
-  /// The summary dill with null safety enabled for the dartdevc target.
-  webPlatformSoundKernelDill,
-  /// The precompiled SDKs and sourcemaps for web debug builds.
-  webPrecompiledSdk,
-  webPrecompiledSdkSourcemaps,
-  webPrecompiledCanvaskitSdk,
-  webPrecompiledCanvaskitSdkSourcemaps,
-  webPrecompiledCanvaskitAndHtmlSdk,
-  webPrecompiledCanvaskitAndHtmlSdkSourcemaps,
-  webPrecompiledSoundSdk,
-  webPrecompiledSoundSdkSourcemaps,
-  webPrecompiledCanvaskitSoundSdk,
-  webPrecompiledCanvaskitSoundSdkSourcemaps,
-  webPrecompiledCanvaskitAndHtmlSoundSdk,
-  webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps,
-
-  iosDeploy,
-  idevicesyslog,
-  idevicescreenshot,
-  iproxy,
   /// The root of the Linux desktop sources.
   linuxDesktopPath,
   // The root of the cpp headers for Linux desktop.
@@ -90,6 +55,49 @@
   /// Tools related to subsetting or icon font files.
   fontSubset,
   constFinder,
+}
+
+/// A subset of [Artifact]s that are platform and build mode independent
+enum HostArtifact {
+  /// The root directory of the dart SDK.
+  engineDartSdkPath,
+  /// The dart binary used to execute any of the required snapshots.
+  engineDartBinary,
+  /// The dart snapshot of the dart2js compiler.
+  dart2jsSnapshot,
+  /// The dart snapshot of the dartdev compiler.
+  dartdevcSnapshot,
+  /// The dart snpashot of the kernel worker compiler.
+  kernelWorkerSnapshot,
+  /// The root of the web implementation of the dart SDK.
+  flutterWebSdk,
+  /// The libraries JSON file for web release builds.
+  flutterWebLibrariesJson,
+  /// The summary dill for the dartdevc target.
+  webPlatformKernelDill,
+  /// The summary dill with null safety enabled for the dartdevc target.
+  webPlatformSoundKernelDill,
+
+  /// The precompiled SDKs and sourcemaps for web debug builds.
+  webPrecompiledSdk,
+  webPrecompiledSdkSourcemaps,
+  webPrecompiledCanvaskitSdk,
+  webPrecompiledCanvaskitSdkSourcemaps,
+  webPrecompiledCanvaskitAndHtmlSdk,
+  webPrecompiledCanvaskitAndHtmlSdkSourcemaps,
+  webPrecompiledSoundSdk,
+  webPrecompiledSoundSdkSourcemaps,
+  webPrecompiledCanvaskitSoundSdk,
+  webPrecompiledCanvaskitSoundSdkSourcemaps,
+  webPrecompiledCanvaskitAndHtmlSoundSdk,
+  webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps,
+
+  iosDeploy,
+  idevicesyslog,
+  idevicescreenshot,
+  iproxy,
+  /// The root of the sky_engine package.
+  skyEnginePath,
 
   /// The pub or pub.bat executable
   pubExecutable,
@@ -121,29 +129,8 @@
     case Artifact.flutterPatchedSdkPath:
       assert(false, 'No filename for sdk path, should not be invoked');
       return null;
-    case Artifact.flutterWebSdk:
-      assert(false, 'No filename for web sdk path, should not be invoked');
-      return null;
-    case Artifact.engineDartSdkPath:
-      return 'dart-sdk';
     case Artifact.frontendServerSnapshotForEngineDartSdk:
       return 'frontend_server.dart.snapshot';
-    case Artifact.engineDartBinary:
-      return 'dart$exe';
-    case Artifact.dart2jsSnapshot:
-      return 'dart2js.dart.snapshot';
-    case Artifact.dartdevcSnapshot:
-      return 'dartdevc.dart.snapshot';
-    case Artifact.kernelWorkerSnapshot:
-      return 'kernel_worker.dart.snapshot';
-    case Artifact.iosDeploy:
-      return 'ios-deploy';
-    case Artifact.idevicesyslog:
-      return 'idevicesyslog';
-    case Artifact.idevicescreenshot:
-      return 'idevicescreenshot';
-    case Artifact.iproxy:
-      return 'iproxy';
     case Artifact.linuxDesktopPath:
       return '';
     case Artifact.linuxHeaders:
@@ -157,10 +144,6 @@
       return 'sky_engine';
     case Artifact.flutterMacOSPodspec:
       return 'FlutterMacOS.podspec';
-    case Artifact.webPlatformKernelDill:
-      return 'flutter_ddc_sdk.dill';
-    case Artifact.webPlatformSoundKernelDill:
-      return 'flutter_ddc_sdk_sound.dill';
     case Artifact.fuchsiaKernelCompiler:
       return 'kernel_compiler.snapshot';
     case Artifact.fuchsiaFlutterRunner:
@@ -171,24 +154,58 @@
       return 'font-subset$exe';
     case Artifact.constFinder:
       return 'const_finder.dart.snapshot';
-    case Artifact.flutterWebLibrariesJson:
+  }
+  assert(false, 'Invalid artifact $artifact.');
+  return null;
+}
+
+String _hostArtifactToFileName(HostArtifact artifact, bool windows) {
+  final String exe = windows ? '.exe' : '';
+  switch (artifact) {
+    case HostArtifact.flutterWebSdk:
+      return '';
+    case HostArtifact.engineDartSdkPath:
+      return 'dart-sdk';
+    case HostArtifact.engineDartBinary:
+      return 'dart$exe';
+    case HostArtifact.dart2jsSnapshot:
+      return 'dart2js.dart.snapshot';
+    case HostArtifact.dartdevcSnapshot:
+      return 'dartdevc.dart.snapshot';
+    case HostArtifact.kernelWorkerSnapshot:
+      return 'kernel_worker.dart.snapshot';
+    case HostArtifact.iosDeploy:
+      return 'ios-deploy';
+    case HostArtifact.idevicesyslog:
+      return 'idevicesyslog';
+    case HostArtifact.idevicescreenshot:
+      return 'idevicescreenshot';
+    case HostArtifact.iproxy:
+      return 'iproxy';
+    case HostArtifact.skyEnginePath:
+      return 'sky_engine';
+    case HostArtifact.webPlatformKernelDill:
+      return 'flutter_ddc_sdk.dill';
+    case HostArtifact.webPlatformSoundKernelDill:
+      return 'flutter_ddc_sdk_sound.dill';
+    case HostArtifact.flutterWebLibrariesJson:
       return 'libraries.json';
-    case Artifact.webPrecompiledSdk:
-    case Artifact.webPrecompiledCanvaskitSdk:
-    case Artifact.webPrecompiledCanvaskitAndHtmlSdk:
-    case Artifact.webPrecompiledSoundSdk:
-    case Artifact.webPrecompiledCanvaskitSoundSdk:
-    case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
+    case HostArtifact.webPrecompiledSdk:
+    case HostArtifact.webPrecompiledCanvaskitSdk:
+    case HostArtifact.webPrecompiledCanvaskitAndHtmlSdk:
+    case HostArtifact.webPrecompiledSoundSdk:
+    case HostArtifact.webPrecompiledCanvaskitSoundSdk:
+    case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
       return 'dart_sdk.js';
-    case Artifact.webPrecompiledSdkSourcemaps:
-    case Artifact.webPrecompiledCanvaskitSdkSourcemaps:
-    case Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
-    case Artifact.webPrecompiledSoundSdkSourcemaps:
-    case Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
-    case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
+    case HostArtifact.webPrecompiledSdkSourcemaps:
+    case HostArtifact.webPrecompiledCanvaskitSdkSourcemaps:
+    case HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
+    case HostArtifact.webPrecompiledSoundSdkSourcemaps:
+    case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
+    case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
       return 'dart_sdk.js.map';
-    case Artifact.pubExecutable:
-      if (platform == TargetPlatform.windows_x64) {
+    case HostArtifact.pubExecutable:
+      if (windows) {
         return 'pub.bat';
       }
       return 'pub';
@@ -213,13 +230,16 @@
   /// A test-specific implementation of artifacts that returns stable paths for
   /// all artifacts.
   ///
+  /// If a [fileSystem] is not provided, creates a new [MemoryFileSystem] instance.
+  ///
   /// Creates a [LocalEngineArtifacts] if `localEngine` is non-null
   @visibleForTesting
-  factory Artifacts.test({String localEngine}) {
+  factory Artifacts.test({String localEngine, FileSystem fileSystem}) {
+    fileSystem ??= MemoryFileSystem.test();
     if (localEngine != null) {
-      return _TestLocalEngine(localEngine);
+      return _TestLocalEngine(localEngine, fileSystem);
     }
-    return _TestArtifacts();
+    return _TestArtifacts(fileSystem);
   }
 
   static LocalEngineArtifacts getLocalEngine(EngineBuildPaths engineBuildPaths) {
@@ -242,6 +262,12 @@
     EnvironmentType environmentType,
   });
 
+  /// Retrieve a host specific artifact that does not depend on the
+  /// current build mode or environment.
+  FileSystemEntity getHostArtifact(
+    HostArtifact artifact,
+  );
+
   // Returns which set of engine artifacts is currently used for the [platform]
   // and [mode] combination.
   String getEngineType(TargetPlatform platform, [ BuildMode mode ]);
@@ -250,7 +276,6 @@
   bool get isLocalEngine;
 }
 
-
 /// Manages the engine artifacts downloaded to the local cache.
 class CachedArtifacts implements Artifacts {
   CachedArtifacts({
@@ -269,6 +294,81 @@
   final OperatingSystemUtils _operatingSystemUtils;
 
   @override
+  FileSystemEntity getHostArtifact(
+    HostArtifact artifact,
+  ) {
+    switch (artifact) {
+      case HostArtifact.engineDartSdkPath:
+        final String path = _dartSdkPath(_fileSystem);
+        return _fileSystem.directory(path);
+      case HostArtifact.engineDartBinary:
+        final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.flutterWebSdk:
+        final String path = _getFlutterWebSdkPath();
+        return _fileSystem.directory(path);
+      case HostArtifact.flutterWebLibrariesJson:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPlatformKernelDill:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPlatformSoundKernelDill:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledSdk:
+      case HostArtifact.webPrecompiledSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitSdk:
+      case HostArtifact.webPrecompiledCanvaskitSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSdk:
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledSoundSdk:
+      case HostArtifact.webPrecompiledSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitSoundSdk:
+      case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.idevicesyslog:
+      case HostArtifact.idevicescreenshot:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName);
+        break;
+      case HostArtifact.skyEnginePath:
+        final Directory dartPackageDirectory = _cache.getCacheDir('pkg');
+        final String path = _fileSystem.path.join(dartPackageDirectory.path,  _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.directory(path);
+      case HostArtifact.pubExecutable:
+        final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin',  _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.dart2jsSnapshot:
+      case HostArtifact.dartdevcSnapshot:
+      case HostArtifact.kernelWorkerSnapshot:
+        final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.iosDeploy:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName);
+      case HostArtifact.iproxy:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName);
+    }
+    assert(false);
+    return null;
+  }
+
+  @override
   String getArtifactPath(
     Artifact artifact, {
     TargetPlatform platform,
@@ -341,16 +441,6 @@
       case Artifact.flutterFramework:
         final String engineDir = _getEngineArtifactsPath(platform, mode);
         return _getIosEngineArtifactPath(engineDir, environmentType, _fileSystem);
-      case Artifact.idevicescreenshot:
-      case Artifact.idevicesyslog:
-        final String artifactFileName = _artifactToFileName(artifact);
-        return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName).path;
-      case Artifact.iosDeploy:
-        final String artifactFileName = _artifactToFileName(artifact);
-        return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName).path;
-      case Artifact.iproxy:
-        final String artifactFileName = _artifactToFileName(artifact);
-        return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName).path;
       default:
         return _getHostArtifactPath(artifact, platform, mode);
     }
@@ -410,30 +500,12 @@
         final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path;
         final String platformDirName = getNameForTargetPlatform(platform);
         return _fileSystem.path.join(engineArtifactsPath, platformDirName, _artifactToFileName(artifact, platform, mode));
-      case Artifact.engineDartSdkPath:
-        return _dartSdkPath(_fileSystem);
-      case Artifact.engineDartBinary:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', _artifactToFileName(artifact, platform));
       case Artifact.platformKernelDill:
         return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), _artifactToFileName(artifact));
       case Artifact.platformLibrariesJson:
         return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), 'lib', _artifactToFileName(artifact));
       case Artifact.flutterPatchedSdkPath:
         return _getFlutterPatchedSdkPath(mode);
-      case Artifact.flutterWebSdk:
-        return _getFlutterWebSdkPath();
-      case Artifact.flutterWebLibrariesJson:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), _artifactToFileName(artifact));
-      case Artifact.webPlatformKernelDill:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact));
-      case Artifact.webPlatformSoundKernelDill:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact));
-      case Artifact.dart2jsSnapshot:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _artifactToFileName(artifact));
-      case Artifact.dartdevcSnapshot:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _artifactToFileName(artifact));
-      case Artifact.kernelWorkerSnapshot:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _artifactToFileName(artifact));
       case Artifact.flutterMacOSFramework:
       case Artifact.linuxDesktopPath:
       case Artifact.windowsDesktopPath:
@@ -463,32 +535,6 @@
                      .childDirectory(getNameForTargetPlatform(platform))
                      .childFile(_artifactToFileName(artifact, platform, mode))
                      .path;
-      case Artifact.webPrecompiledSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitAndHtmlSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _artifactToFileName(artifact, platform, mode));
-      case Artifact.pubExecutable:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin',  _artifactToFileName(artifact, platform, mode));
       default:
         assert(false, 'Artifact $artifact not available for platform $platform.');
         return null;
@@ -622,6 +668,86 @@
   final Platform _platform;
   final OperatingSystemUtils _operatingSystemUtils;
 
+
+  @override
+  FileSystemEntity getHostArtifact(
+    HostArtifact artifact,
+  ) {
+    switch (artifact) {
+      case HostArtifact.engineDartSdkPath:
+        final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk');
+        return _fileSystem.directory(path);
+      case HostArtifact.engineDartBinary:
+        final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.dart2jsSnapshot:
+        final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.dartdevcSnapshot:
+        final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.kernelWorkerSnapshot:
+        final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.flutterWebSdk:
+        final String path = _getFlutterWebSdkPath();
+        return _fileSystem.directory(path);
+      case HostArtifact.flutterWebLibrariesJson:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPlatformKernelDill:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPlatformSoundKernelDill:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledSdk:
+      case HostArtifact.webPrecompiledSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitSdk:
+      case HostArtifact.webPrecompiledCanvaskitSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSdk:
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledSoundSdk:
+      case HostArtifact.webPrecompiledSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitSoundSdk:
+      case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
+      case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
+        final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.idevicesyslog:
+      case HostArtifact.idevicescreenshot:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName);
+        break;
+      case HostArtifact.skyEnginePath:
+        final Directory dartPackageDirectory = _cache.getCacheDir('pkg');
+        final String path = _fileSystem.path.join(dartPackageDirectory.path,  _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.directory(path);
+      case HostArtifact.pubExecutable:
+        final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin',  _hostArtifactToFileName(artifact, _platform.isWindows));
+        return _fileSystem.file(path);
+      case HostArtifact.iosDeploy:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName);
+      case HostArtifact.iproxy:
+        final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows);
+        return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName);
+    }
+    assert(false);
+    return null;
+  }
+
   @override
   String getArtifactPath(
     Artifact artifact, {
@@ -630,7 +756,7 @@
     EnvironmentType environmentType,
   }) {
     platform ??= _currentHostPlatform(_platform, _operatingSystemUtils);
-    final bool isDirectoryArtifact = artifact == Artifact.flutterWebSdk || artifact == Artifact.flutterPatchedSdkPath;
+    final bool isDirectoryArtifact = artifact == Artifact.flutterPatchedSdkPath;
     final String artifactFileName = isDirectoryArtifact ? null : _artifactToFileName(artifact, platform, mode);
     switch (artifact) {
       case Artifact.genSnapshot:
@@ -663,35 +789,11 @@
           return _fileSystem.path.join(engineOutPath, 'flutter_runner_patched_sdk');
         }
         return _getFlutterPatchedSdkPath(BuildMode.debug);
-      case Artifact.flutterWebSdk:
-        return _getFlutterWebSdkPath();
-      case Artifact.frontendServerSnapshotForEngineDartSdk:
-        return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName);
-      case Artifact.engineDartSdkPath:
-        return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk');
-      case Artifact.engineDartBinary:
-        return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', artifactFileName);
-      case Artifact.dart2jsSnapshot:
         return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName);
-      case Artifact.dartdevcSnapshot:
-        return _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', artifactFileName);
-      case Artifact.kernelWorkerSnapshot:
-        return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName);
-      case Artifact.idevicescreenshot:
-      case Artifact.idevicesyslog:
-        return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName).path;
-      case Artifact.iosDeploy:
-        return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName).path;
-      case Artifact.iproxy:
-        return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName).path;
       case Artifact.skyEnginePath:
         return _fileSystem.path.join(_hostEngineOutPath, 'gen', 'dart-pkg', artifactFileName);
       case Artifact.flutterMacOSPodspec:
         return _fileSystem.path.join(_hostEngineOutPath, _artifactToFileName(artifact));
-      case Artifact.webPlatformKernelDill:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact));
-      case Artifact.webPlatformSoundKernelDill:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact));
       case Artifact.fuchsiaKernelCompiler:
         final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform());
         final String modeName = mode.isRelease ? 'release' : mode.toString();
@@ -705,40 +807,15 @@
         return _fileSystem.path.join(_hostEngineOutPath, artifactFileName);
       case Artifact.constFinder:
         return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName);
-      case Artifact.flutterWebLibrariesJson:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), artifactFileName);
-      case Artifact.webPrecompiledSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', artifactFileName);
-      case Artifact.webPrecompiledSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitAndHtmlSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', artifactFileName);
-      case Artifact.webPrecompiledSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', artifactFileName);
-      case Artifact.webPrecompiledSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdk:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', artifactFileName);
-      case Artifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps:
-        return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', artifactFileName);
-      case Artifact.pubExecutable:
-        return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', _artifactToFileName(artifact, platform, mode));
       case Artifact.windowsUwpDesktopPath:
       case Artifact.linuxDesktopPath:
       case Artifact.linuxHeaders:
       case Artifact.windowsDesktopPath:
       case Artifact.windowsCppClientWrapper:
         return _fileSystem.path.join(_hostEngineOutPath, artifactFileName);
+      case Artifact.frontendServerSnapshotForEngineDartSdk:
+        return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName);
+        break;
     }
     assert(false, 'Invalid artifact $artifact.');
     return null;
@@ -816,9 +893,6 @@
     if (artifact == Artifact.frontendServerSnapshotForEngineDartSdk && frontendServer != null) {
       return frontendServer.path;
     }
-    if (artifact == Artifact.engineDartBinary && engineDartBinary != null) {
-      return engineDartBinary.path;
-    }
     if (artifact == Artifact.platformKernelDill && platformKernelDill != null) {
       return platformKernelDill.path;
     }
@@ -838,6 +912,16 @@
 
   @override
   bool get isLocalEngine => parent.isLocalEngine;
+
+  @override
+  FileSystemEntity getHostArtifact(HostArtifact artifact) {
+    if (artifact == HostArtifact.engineDartBinary && engineDartBinary != null) {
+      return engineDartBinary;
+    }
+    return parent.getHostArtifact(
+      artifact,
+    );
+  }
 }
 
 /// Locate the Dart SDK.
@@ -846,6 +930,10 @@
 }
 
 class _TestArtifacts implements Artifacts {
+  _TestArtifacts(this.fileSystem);
+
+  final FileSystem fileSystem;
+
   @override
   String getArtifactPath(
     Artifact artifact, {
@@ -874,10 +962,15 @@
 
   @override
   bool get isLocalEngine => false;
+
+  @override
+  FileSystemEntity getHostArtifact(HostArtifact artifact) {
+    return fileSystem.file(artifact.toString());
+  }
 }
 
 class _TestLocalEngine extends _TestArtifacts implements LocalEngineArtifacts {
-  _TestLocalEngine(this.engineOutPath);
+  _TestLocalEngine(this.engineOutPath, FileSystem fileSystem) : super(fileSystem);
 
   @override
   bool get isLocalEngine => true;
diff --git a/packages/flutter_tools/lib/src/build_system/source.dart b/packages/flutter_tools/lib/src/build_system/source.dart
index c6a2464..24bc6fe 100644
--- a/packages/flutter_tools/lib/src/build_system/source.dart
+++ b/packages/flutter_tools/lib/src/build_system/source.dart
@@ -193,6 +193,34 @@
     }
     sources.add(environment.fileSystem.file(path));
   }
+
+  /// Visit a [Source] which is defined by an [HostArtifact] from the flutter cache.
+  ///
+  /// If the [Artifact] points to a directory then all child files are included.
+  /// To increase the performance of builds that use a known revision of Flutter,
+  /// these are updated to point towards the engine.version file instead of
+  /// the artifact itself.
+  void visitHostArtifact(HostArtifact artifact) {
+    // This is not a local engine.
+    if (environment.engineVersion != null) {
+      sources.add(environment.flutterRootDir
+        .childDirectory('bin')
+        .childDirectory('internal')
+        .childFile('engine.version'),
+      );
+      return;
+    }
+    final FileSystemEntity entity = environment.artifacts.getHostArtifact(artifact);
+    if (entity is Directory) {
+      sources.addAll(<File>[
+        for (FileSystemEntity entity in entity.listSync(recursive: true))
+          if (entity is File)
+            entity,
+      ]);
+      return;
+    }
+    sources.add(entity as File);
+  }
 }
 
 /// A description of an input or output of a [Target].
@@ -200,11 +228,17 @@
   /// This source is a file URL which contains some references to magic
   /// environment variables.
   const factory Source.pattern(String pattern, { bool optional }) = _PatternSource;
+
   /// The source is provided by an [Artifact].
   ///
   /// If [artifact] points to a directory then all child files are included.
   const factory Source.artifact(Artifact artifact, {TargetPlatform platform, BuildMode mode}) = _ArtifactSource;
 
+  /// The source is provided by an [HostArtifact].
+  ///
+  /// If [artifact] points to a directory then all child files are included.
+  const factory Source.hostArtifact(HostArtifact artifact) = _HostArtifactSource;
+
   /// Visit the particular source type.
   void accept(SourceVisitor visitor);
 
@@ -244,3 +278,15 @@
   @override
   bool get implicit => false;
 }
+
+class _HostArtifactSource implements Source {
+  const _HostArtifactSource(this.artifact);
+
+  final HostArtifact artifact;
+
+  @override
+  void accept(SourceVisitor visitor) => visitor.visitHostArtifact(artifact);
+
+  @override
+  bool get implicit => false;
+}
diff --git a/packages/flutter_tools/lib/src/build_system/targets/android.dart b/packages/flutter_tools/lib/src/build_system/targets/android.dart
index a9a615c..60711bd 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/android.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/android.dart
@@ -181,7 +181,7 @@
   List<Source> get inputs => <Source>[
     const Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/android.dart'),
     const Source.pattern('{BUILD_DIR}/app.dill'),
-    const Source.artifact(Artifact.engineDartBinary),
+    const Source.hostArtifact(HostArtifact.engineDartBinary),
     const Source.artifact(Artifact.skyEnginePath),
     Source.artifact(Artifact.genSnapshot,
       mode: buildMode,
diff --git a/packages/flutter_tools/lib/src/build_system/targets/common.dart b/packages/flutter_tools/lib/src/build_system/targets/common.dart
index f221009..2a7ce7b 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/common.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/common.dart
@@ -194,7 +194,7 @@
     Source.pattern('{PROJECT_DIR}/.dart_tool/package_config_subset'),
     Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/common.dart'),
     Source.artifact(Artifact.platformKernelDill),
-    Source.artifact(Artifact.engineDartBinary),
+    Source.hostArtifact(HostArtifact.engineDartBinary),
     Source.artifact(Artifact.frontendServerSnapshotForEngineDartSdk),
   ];
 
@@ -362,7 +362,7 @@
   List<Source> get inputs => <Source>[
     const Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/common.dart'),
     const Source.pattern('{BUILD_DIR}/app.dill'),
-    const Source.artifact(Artifact.engineDartBinary),
+    const Source.hostArtifact(HostArtifact.engineDartBinary),
     const Source.artifact(Artifact.skyEnginePath),
     Source.artifact(Artifact.genSnapshot,
       platform: targetPlatform,
@@ -394,7 +394,7 @@
   List<Source> get inputs => <Source>[
     const Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/common.dart'),
     const Source.pattern('{BUILD_DIR}/app.dill'),
-    const Source.artifact(Artifact.engineDartBinary),
+    const Source.hostArtifact(HostArtifact.engineDartBinary),
     const Source.artifact(Artifact.skyEnginePath),
     Source.artifact(Artifact.genSnapshot,
       platform: targetPlatform,
diff --git a/packages/flutter_tools/lib/src/build_system/targets/icon_tree_shaker.dart b/packages/flutter_tools/lib/src/build_system/targets/icon_tree_shaker.dart
index 0043d53..2d56bb0 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/icon_tree_shaker.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/icon_tree_shaker.dart
@@ -113,7 +113,7 @@
       _artifacts.getArtifactPath(Artifact.constFinder),
     );
     final File dart = _fs.file(
-      _artifacts.getArtifactPath(Artifact.engineDartBinary),
+      _artifacts.getHostArtifact(HostArtifact.engineDartBinary),
     );
 
     final Map<String, List<int>> iconData = await _findConstants(
diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
index 88c7c8d..dbef1fa 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -139,7 +139,7 @@
   List<Source> get inputs => const <Source>[
     Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/ios.dart'),
     Source.pattern('{BUILD_DIR}/app.dill'),
-    Source.artifact(Artifact.engineDartBinary),
+    Source.hostArtifact(HostArtifact.engineDartBinary),
     Source.artifact(Artifact.skyEnginePath),
     // TODO(jonahwilliams): cannot reference gen_snapshot with artifacts since
     // it resolves to a file (ios/gen_snapshot) that never exists. This was
@@ -174,7 +174,7 @@
   List<Source> get inputs => const <Source>[
     Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/ios.dart'),
     Source.pattern('{BUILD_DIR}/app.dill'),
-    Source.artifact(Artifact.engineDartBinary),
+    Source.hostArtifact(HostArtifact.engineDartBinary),
     Source.artifact(Artifact.skyEnginePath),
     // TODO(jonahwilliams): cannot reference gen_snapshot with artifacts since
     // it resolves to a file (ios/gen_snapshot) that never exists. This was
diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart
index a2c9ca1..f713bdd 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/web.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart
@@ -178,9 +178,9 @@
 
   @override
   List<Source> get inputs => const <Source>[
-    Source.artifact(Artifact.flutterWebSdk),
-    Source.artifact(Artifact.dart2jsSnapshot),
-    Source.artifact(Artifact.engineDartBinary),
+    Source.hostArtifact(HostArtifact.flutterWebSdk),
+    Source.hostArtifact(HostArtifact.dart2jsSnapshot),
+    Source.hostArtifact(HostArtifact.engineDartBinary),
     Source.pattern('{BUILD_DIR}/main.dart'),
     Source.pattern('{PROJECT_DIR}/.dart_tool/package_config_subset'),
   ];
@@ -198,12 +198,12 @@
     final BuildMode buildMode = getBuildModeForName(environment.defines[kBuildMode]);
     final bool sourceMapsEnabled = environment.defines[kSourceMapsEnabled] == 'true';
     final bool nativeNullAssertions = environment.defines[kNativeNullAssertions] == 'true';
-
+    final String librariesSpec = (globals.artifacts.getHostArtifact(HostArtifact.flutterWebSdk) as Directory).childFile('libraries.json').path;
     final List<String> sharedCommandOptions = <String>[
-      globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+      globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
       '--disable-dart-dev',
-      globals.artifacts.getArtifactPath(Artifact.dart2jsSnapshot),
-      '--libraries-spec=${globals.fs.path.join(globals.artifacts.getArtifactPath(Artifact.flutterWebSdk), 'libraries.json')}',
+      globals.artifacts.getHostArtifact(HostArtifact.dart2jsSnapshot).path,
+      '--libraries-spec=$librariesSpec',
       ...?decodeCommaSeparated(environment.defines, kExtraFrontEndOptions),
       if (nativeNullAssertions)
         '--native-null-assertions',
diff --git a/packages/flutter_tools/lib/src/commands/analyze_base.dart b/packages/flutter_tools/lib/src/commands/analyze_base.dart
index 71bc312..ef7a1c5 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_base.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_base.dart
@@ -81,7 +81,7 @@
   }
 
   bool get isFlutterRepo => argResults['flutter-repo'] as bool;
-  String get sdkPath => argResults['dart-sdk'] as String ?? artifacts.getArtifactPath(Artifact.engineDartSdkPath);
+  String get sdkPath => argResults['dart-sdk'] as String ?? artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path;
   bool get isBenchmarking => argResults['benchmark'] as bool;
   String get protocolTrafficLog => argResults['protocol-traffic-log'] as String;
 
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index f297101..ef59872 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -214,7 +214,7 @@
       applicationPackageFactory: ApplicationPackageFactory.instance,
       logger: _logger,
       processUtils: globals.processUtils,
-      dartSdkPath: globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+      dartSdkPath: globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
     );
     final PackageConfig packageConfig = await loadPackageConfigWithLogging(
       _fileSystem.file('.packages'),
diff --git a/packages/flutter_tools/lib/src/commands/format.dart b/packages/flutter_tools/lib/src/commands/format.dart
index cf6d292..3e2eaa8 100644
--- a/packages/flutter_tools/lib/src/commands/format.dart
+++ b/packages/flutter_tools/lib/src/commands/format.dart
@@ -61,8 +61,8 @@
       );
     }
 
-    final String dartSdk = globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath);
-    final String dartBinary = globals.artifacts.getArtifactPath(Artifact.engineDartBinary);
+    final String dartSdk = globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path;
+    final String dartBinary = globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path;
     final List<String> command = <String>[
       dartBinary,
       globals.fs.path.join(dartSdk, 'bin', 'snapshots', 'dartfmt.dart.snapshot'),
diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart
index b27209d..1a32d5e 100644
--- a/packages/flutter_tools/lib/src/compile.dart
+++ b/packages/flutter_tools/lib/src/compile.dart
@@ -242,7 +242,7 @@
     if (!sdkRoot.endsWith('/')) {
       sdkRoot = '$sdkRoot/';
     }
-    final String engineDartPath = _artifacts.getArtifactPath(Artifact.engineDartBinary);
+    final String engineDartPath = _artifacts.getHostArtifact(HostArtifact.engineDartBinary).path;
     if (!_processManager.canRun(engineDartPath)) {
       throwToolExit('Unable to find Dart binary at $engineDartPath');
     }
@@ -666,7 +666,7 @@
       Artifact.frontendServerSnapshotForEngineDartSdk
     );
     final List<String> command = <String>[
-      _artifacts.getArtifactPath(Artifact.engineDartBinary),
+      _artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
       '--disable-dart-dev',
       frontendServer,
       '--sdk-root',
diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart
index ed9e6e0..4c38bfc 100644
--- a/packages/flutter_tools/lib/src/context_runner.dart
+++ b/packages/flutter_tools/lib/src/context_runner.dart
@@ -27,7 +27,6 @@
 import 'base/terminal.dart';
 import 'base/time.dart';
 import 'base/user_messages.dart';
-import 'build_info.dart';
 import 'build_system/build_system.dart';
 import 'cache.dart';
 import 'custom_devices/custom_devices_config.dart';
@@ -210,7 +209,7 @@
       ),
       DevtoolsLauncher: () => DevtoolsServerLauncher(
         processManager: globals.processManager,
-        pubExecutable: globals.artifacts.getArtifactPath(Artifact.pubExecutable),
+        pubExecutable: globals.artifacts.getHostArtifact(HostArtifact.pubExecutable).path,
         logger: globals.logger,
         platform: globals.platform,
         persistentToolState: globals.persistentToolState,
@@ -355,10 +354,9 @@
         platform: globals.platform,
         xcode: globals.xcode,
         iproxy: IProxy(
-          iproxyPath: globals.artifacts.getArtifactPath(
-            Artifact.iproxy,
-            platform: TargetPlatform.ios,
-          ),
+          iproxyPath: globals.artifacts.getHostArtifact(
+            HostArtifact.iproxy,
+          ).path,
           logger: globals.logger,
           processManager: globals.processManager,
           dyLdLibEntry: globals.cache.dyLdLibEntry,
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
index 3aab6d8..05ceae8 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
@@ -65,7 +65,7 @@
     ];
 
     final List<String> command = <String>[
-      globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+      globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
       '--disable-dart-dev',
       kernelCompiler,
       ...flags,
diff --git a/packages/flutter_tools/lib/src/ios/ios_deploy.dart b/packages/flutter_tools/lib/src/ios/ios_deploy.dart
index 07abf60..5304b90 100644
--- a/packages/flutter_tools/lib/src/ios/ios_deploy.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_deploy.dart
@@ -16,7 +16,6 @@
 import '../base/logger.dart';
 import '../base/platform.dart';
 import '../base/process.dart';
-import '../build_info.dart';
 import '../cache.dart';
 import '../convert.dart';
 import 'code_signing.dart';
@@ -39,7 +38,7 @@
        _cache = cache,
        _processUtils = ProcessUtils(processManager: processManager, logger: logger),
        _logger = logger,
-       _binaryPath = artifacts.getArtifactPath(Artifact.iosDeploy, platform: TargetPlatform.ios);
+       _binaryPath = artifacts.getHostArtifact(HostArtifact.iosDeploy).path;
 
   final Cache _cache;
   final String _binaryPath;
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index 8218693..35d9b1d 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -39,8 +39,8 @@
     @required Cache cache,
     @required ProcessManager processManager,
     @required Logger logger,
-  }) : _idevicesyslogPath = artifacts.getArtifactPath(Artifact.idevicesyslog, platform: TargetPlatform.ios),
-      _idevicescreenshotPath = artifacts.getArtifactPath(Artifact.idevicescreenshot, platform: TargetPlatform.ios),
+  }) : _idevicesyslogPath = artifacts.getHostArtifact(HostArtifact.idevicesyslog).path,
+      _idevicescreenshotPath = artifacts.getHostArtifact(HostArtifact.idevicescreenshot).path,
       _dyLdLibEntry = cache.dyLdLibEntry,
       _processUtils = ProcessUtils(logger: logger, processManager: processManager),
       _processManager = processManager;
diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart
index 30f2e6b..ae5ac2d 100644
--- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart
+++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart
@@ -537,7 +537,7 @@
     // Otherwise it must be a Dart SDK source or a Flutter Web SDK source.
     final Directory dartSdkParent = globals.fs
         .directory(
-            globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath))
+            globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath))
         .parent;
     final File dartSdkFile = globals.fs.file(dartSdkParent.uri.resolve(path));
     if (dartSdkFile.existsSync()) {
@@ -545,19 +545,19 @@
     }
 
     final Directory flutterWebSdk = globals.fs
-        .directory(globals.artifacts.getArtifactPath(Artifact.flutterWebSdk));
+        .directory(globals.artifacts.getHostArtifact(HostArtifact.flutterWebSdk));
     final File webSdkFile = globals.fs.file(flutterWebSdk.uri.resolve(path));
 
     return webSdkFile;
   }
 
   File get _resolveDartSdkJsFile =>
-      globals.fs.file(globals.artifacts.getArtifactPath(
+      globals.fs.file(globals.artifacts.getHostArtifact(
           kDartSdkJsArtifactMap[webRenderer][_nullSafetyMode]
       ));
 
   File get _resolveDartSdkJsMapFile =>
-    globals.fs.file(globals.artifacts.getArtifactPath(
+    globals.fs.file(globals.artifacts.getHostArtifact(
         kDartSdkJsMapArtifactMap[webRenderer][_nullSafetyMode]
     ));
 
@@ -869,7 +869,7 @@
 
   @visibleForTesting
   final File requireJS = globals.fs.file(globals.fs.path.join(
-    globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
     'lib',
     'dev_compiler',
     'kernel',
@@ -879,7 +879,7 @@
 
   @visibleForTesting
   final File stackTraceMapper = globals.fs.file(globals.fs.path.join(
-    globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
     'lib',
     'dev_compiler',
     'web',
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index d27dbbd..e35e64f 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -100,15 +100,15 @@
     // used to file a bug, but the compiler will still start up correctly.
     if (targetPlatform == TargetPlatform.web_javascript) {
       // TODO(jonahwilliams): consistently provide these flags across platforms.
-      Artifact platformDillArtifact;
+      HostArtifact platformDillArtifact;
       final List<String> extraFrontEndOptions = List<String>.of(buildInfo.extraFrontEndOptions ?? <String>[]);
       if (buildInfo.nullSafetyMode == NullSafetyMode.unsound) {
-        platformDillArtifact = Artifact.webPlatformKernelDill;
+        platformDillArtifact = HostArtifact.webPlatformKernelDill;
         if (!extraFrontEndOptions.contains('--no-sound-null-safety')) {
           extraFrontEndOptions.add('--no-sound-null-safety');
         }
       } else if (buildInfo.nullSafetyMode == NullSafetyMode.sound) {
-        platformDillArtifact = Artifact.webPlatformSoundKernelDill;
+        platformDillArtifact = HostArtifact.webPlatformSoundKernelDill;
         if (!extraFrontEndOptions.contains('--sound-null-safety')) {
           extraFrontEndOptions.add('--sound-null-safety');
         }
@@ -117,7 +117,7 @@
       }
 
       generator = ResidentCompiler(
-        globals.artifacts.getArtifactPath(Artifact.flutterWebSdk, mode: buildInfo.mode),
+        globals.artifacts.getHostArtifact(HostArtifact.flutterWebSdk).path,
         buildMode: buildInfo.mode,
         trackWidgetCreation: buildInfo.trackWidgetCreation,
         fileSystemRoots: fileSystemRoots ?? <String>[],
@@ -132,11 +132,11 @@
         targetModel: TargetModel.dartdevc,
         extraFrontEndOptions: extraFrontEndOptions,
         platformDill: globals.fs.file(globals.artifacts
-          .getArtifactPath(platformDillArtifact, mode: buildInfo.mode))
+          .getHostArtifact(platformDillArtifact))
           .absolute.uri.toString(),
         dartDefines: buildInfo.dartDefines,
         librariesSpec: globals.fs.file(globals.artifacts
-          .getArtifactPath(Artifact.flutterWebLibrariesJson)).uri.toString(),
+          .getHostArtifact(HostArtifact.flutterWebLibrariesJson)).uri.toString(),
         packagesPath: buildInfo.packagesPath,
         artifacts: globals.artifacts,
         processManager: globals.processManager,
@@ -869,7 +869,7 @@
     return true;
   }
 
-  /// Toggle the operating system brightness (light or dart).
+  /// Toggle the operating system brightness (light or dark).
   Future<bool> debugToggleBrightness() async {
     if (!supportsServiceProtocol) {
       return false;
diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
index ed8ef6d..3b9ad88 100644
--- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
@@ -173,7 +173,7 @@
 
   /// The require js binary.
   File get _requireJs => _fileSystem.file(_fileSystem.path.join(
-    _artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+    _artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
     'lib',
     'dev_compiler',
     'kernel',
@@ -183,7 +183,7 @@
 
   /// The ddc to dart stack trace mapper.
   File get _stackTraceMapper => _fileSystem.file(_fileSystem.path.join(
-    _artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+    _artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
     'lib',
     'dev_compiler',
     'web',
@@ -191,10 +191,10 @@
   ));
 
   File get _dartSdk => _fileSystem.file(
-    _artifacts.getArtifactPath(kDartSdkJsArtifactMap[_rendererMode][_nullSafetyMode]));
+    _artifacts.getHostArtifact(kDartSdkJsArtifactMap[_rendererMode][_nullSafetyMode]));
 
   File get _dartSdkSourcemaps => _fileSystem.file(
-    _artifacts.getArtifactPath(kDartSdkJsMapArtifactMap[_rendererMode][_nullSafetyMode]));
+    _artifacts.getHostArtifact(kDartSdkJsMapArtifactMap[_rendererMode][_nullSafetyMode]));
 
   /// The precompiled test javascript.
   File get _testDartJs => _fileSystem.file(_fileSystem.path.join(
diff --git a/packages/flutter_tools/lib/src/test/web_test_compiler.dart b/packages/flutter_tools/lib/src/test/web_test_compiler.dart
index 2e0d8ef..88047e9 100644
--- a/packages/flutter_tools/lib/src/test/web_test_compiler.dart
+++ b/packages/flutter_tools/lib/src/test/web_test_compiler.dart
@@ -53,17 +53,17 @@
     @required BuildInfo buildInfo,
   }) async {
     LanguageVersion languageVersion = LanguageVersion(2, 8);
-    Artifact platformDillArtifact;
+    HostArtifact platformDillArtifact;
     // TODO(jonahwilliams): to support autodetect this would need to partition the source code into a
     // a sound and unsound set and perform separate compilations.
     final List<String> extraFrontEndOptions = List<String>.of(buildInfo.extraFrontEndOptions ?? <String>[]);
     if (buildInfo.nullSafetyMode == NullSafetyMode.unsound || buildInfo.nullSafetyMode == NullSafetyMode.autodetect) {
-      platformDillArtifact = Artifact.webPlatformKernelDill;
+      platformDillArtifact = HostArtifact.webPlatformKernelDill;
       if (!extraFrontEndOptions.contains('--no-sound-null-safety')) {
         extraFrontEndOptions.add('--no-sound-null-safety');
       }
     } else if (buildInfo.nullSafetyMode == NullSafetyMode.sound) {
-      platformDillArtifact = Artifact.webPlatformSoundKernelDill;
+      platformDillArtifact = HostArtifact.webPlatformSoundKernelDill;
       languageVersion = currentLanguageVersion(_fileSystem, Cache.flutterRoot);
       if (!extraFrontEndOptions.contains('--sound-null-safety')) {
         extraFrontEndOptions.add('--sound-null-safety');
@@ -107,7 +107,7 @@
       config: _config,
     );
     final ResidentCompiler residentCompiler = ResidentCompiler(
-      _artifacts.getArtifactPath(Artifact.flutterWebSdk, mode: buildInfo.mode),
+      _artifacts.getHostArtifact(HostArtifact.flutterWebSdk).path,
       buildMode: buildInfo.mode,
       trackWidgetCreation: buildInfo.trackWidgetCreation,
       fileSystemRoots: <String>[
@@ -120,12 +120,11 @@
       initializeFromDill: cachedKernelPath,
       targetModel: TargetModel.dartdevc,
       extraFrontEndOptions: extraFrontEndOptions,
-      platformDill: _fileSystem.file(_artifacts
-        .getArtifactPath(platformDillArtifact, mode: buildInfo.mode))
+      platformDill: _artifacts
+        .getHostArtifact(platformDillArtifact)
         .absolute.uri.toString(),
       dartDefines: buildInfo.dartDefines,
-      librariesSpec: _fileSystem.file(_artifacts
-        .getArtifactPath(Artifact.flutterWebLibrariesJson)).uri.toString(),
+      librariesSpec: _artifacts.getHostArtifact(HostArtifact.flutterWebLibrariesJson).uri.toString(),
       packagesPath: buildInfo.packagesPath,
       artifacts: _artifacts,
       processManager: _processManager,
diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart
index 27e9ed1..6a1d6fe 100644
--- a/packages/flutter_tools/lib/src/web/compile.dart
+++ b/packages/flutter_tools/lib/src/web/compile.dart
@@ -101,33 +101,33 @@
 }
 
 /// The correct precompiled artifact to use for each build and render mode.
-const Map<WebRendererMode, Map<NullSafetyMode, Artifact>> kDartSdkJsArtifactMap = <WebRendererMode, Map<NullSafetyMode, Artifact>>{
-  WebRendererMode.autoDetect: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitAndHtmlSoundSdk,
-    NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitAndHtmlSdk,
+const Map<WebRendererMode, Map<NullSafetyMode, HostArtifact>> kDartSdkJsArtifactMap = <WebRendererMode, Map<NullSafetyMode, HostArtifact>>{
+  WebRendererMode.autoDetect: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledCanvaskitAndHtmlSdk,
   },
-  WebRendererMode.canvaskit: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitSoundSdk,
-    NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitSdk,
+  WebRendererMode.canvaskit: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledCanvaskitSoundSdk,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledCanvaskitSdk,
   },
-  WebRendererMode.html: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledSoundSdk,
-    NullSafetyMode.unsound: Artifact.webPrecompiledSdk,
+  WebRendererMode.html: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledSoundSdk,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledSdk,
   },
 };
 
 /// The correct source map artifact to use for each build and render mode.
-const Map<WebRendererMode, Map<NullSafetyMode, Artifact>> kDartSdkJsMapArtifactMap = <WebRendererMode, Map<NullSafetyMode, Artifact>>{
-  WebRendererMode.autoDetect: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps,
-    NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps,
+const Map<WebRendererMode, Map<NullSafetyMode, HostArtifact>> kDartSdkJsMapArtifactMap = <WebRendererMode, Map<NullSafetyMode, HostArtifact>>{
+  WebRendererMode.autoDetect: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps,
   },
-  WebRendererMode.canvaskit: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps,
-    NullSafetyMode.unsound: Artifact.webPrecompiledCanvaskitSdkSourcemaps,
+  WebRendererMode.canvaskit: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledCanvaskitSdkSourcemaps,
   },
-  WebRendererMode.html: <NullSafetyMode, Artifact> {
-    NullSafetyMode.sound: Artifact.webPrecompiledSoundSdkSourcemaps,
-    NullSafetyMode.unsound: Artifact.webPrecompiledSdkSourcemaps,
+  WebRendererMode.html: <NullSafetyMode, HostArtifact> {
+    NullSafetyMode.sound: HostArtifact.webPrecompiledSoundSdkSourcemaps,
+    NullSafetyMode.unsound: HostArtifact.webPrecompiledSdkSourcemaps,
   },
 };
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart
index 773d33f..644024c 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart
@@ -91,7 +91,7 @@
       );
 
       server = AnalysisServer(
-        globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+        globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
         <String>[tempDir.path],
         fileSystem: fileSystem,
         platform: platform,
@@ -129,7 +129,7 @@
     );
 
       server = AnalysisServer(
-        globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+        globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
         <String>[tempDir.path],
         fileSystem: fileSystem,
         platform: platform,
@@ -154,7 +154,7 @@
     const String contents = "StringBuffer bar = StringBuffer('baz');";
     tempDir.childFile('main.dart').writeAsStringSync(contents);
     server = AnalysisServer(
-      globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+      globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
       <String>[tempDir.path],
       fileSystem: fileSystem,
       platform: platform,
@@ -180,13 +180,13 @@
       <FakeCommand>[
         FakeCommand(
           command: const <String>[
-            'Artifact.engineDartSdkPath/bin/dart',
+            'HostArtifact.engineDartSdkPath/bin/dart',
             '--disable-dart-dev',
-            'Artifact.engineDartSdkPath/bin/snapshots/analysis_server.dart.snapshot',
+            'HostArtifact.engineDartSdkPath/bin/snapshots/analysis_server.dart.snapshot',
             '--disable-server-feature-completion',
             '--disable-server-feature-search',
             '--sdk',
-            'Artifact.engineDartSdkPath',
+            'HostArtifact.engineDartSdkPath',
           ],
           completer: completer,
           stdin: IOSink(stdin.sink),
@@ -218,13 +218,13 @@
       <FakeCommand>[
         FakeCommand(
           command: const <String>[
-            'Artifact.engineDartSdkPath/bin/dart',
+            'HostArtifact.engineDartSdkPath/bin/dart',
             '--disable-dart-dev',
-            'Artifact.engineDartSdkPath/bin/snapshots/analysis_server.dart.snapshot',
+            'HostArtifact.engineDartSdkPath/bin/snapshots/analysis_server.dart.snapshot',
             '--disable-server-feature-completion',
             '--disable-server-feature-search',
             '--sdk',
-            'Artifact.engineDartSdkPath',
+            'HostArtifact.engineDartSdkPath',
           ],
           completer: completer,
           stdin: IOSink(stdin.sink),
diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
index 6b364f0..8de4211 100755
--- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
+++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
@@ -1069,7 +1069,7 @@
 
         final Process process = await Process.start(
           globals.fs.path.join(
-            globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+            globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
             'bin',
             globals.platform.isWindows ? 'dartfmt.bat' : 'dartfmt',
           ),
@@ -1171,7 +1171,7 @@
 
         final Process process = await Process.start(
           globals.fs.path.join(
-            globals.artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+            globals.artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
             'bin',
             globals.platform.isWindows ? 'dartfmt.bat' : 'dartfmt',
           ),
@@ -2563,7 +2563,7 @@
   ];
 
   final ProcessResult exec = await Process.run(
-    globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
     args,
     workingDirectory: workingDir,
   );
@@ -2586,7 +2586,7 @@
   // While flutter test does get packages, it doesn't write version
   // files anymore.
   await Process.run(
-    globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
     <String>[
       flutterToolsSnapshotPath,
       'packages',
@@ -2603,7 +2603,7 @@
   ];
 
   final ProcessResult exec = await Process.run(
-    globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
     args,
     workingDirectory: workingDir.path,
   );
diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart
index 18da71d..a3ce055 100644
--- a/packages/flutter_tools/test/general.shard/artifacts_test.dart
+++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart
@@ -135,35 +135,35 @@
 
     testWithoutContext('precompiled web artifact paths are correct', () {
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledSdk),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledSdk).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd/dart_sdk.js',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledSdkSourcemaps),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledSdkSourcemaps).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd/dart_sdk.js.map',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledCanvaskitSdk),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledCanvaskitSdk).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledCanvaskitSdkSourcemaps),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledCanvaskitSdkSourcemaps).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit/dart_sdk.js.map',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledSoundSdk),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledSoundSdk).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-sound/dart_sdk.js',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledSoundSdkSourcemaps),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledSoundSdkSourcemaps).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-sound/dart_sdk.js.map',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdk),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledCanvaskitSoundSdk).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js',
       );
       expect(
-        artifacts.getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps),
+        artifacts.getHostArtifact(HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps).path,
         'root/bin/cache/flutter_web_sdk/kernel/amd-canvaskit-sound/dart_sdk.js.map',
       );
     });
@@ -293,7 +293,7 @@
         fileSystem.path.join('/out', 'android_debug_unopt', 'flutter_tester'),
       );
       expect(
-        artifacts.getArtifactPath(Artifact.engineDartSdkPath),
+        artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path,
         fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk'),
       );
     });
@@ -324,7 +324,7 @@
         operatingSystemUtils: FakeOperatingSystemUtils(),
       );
 
-      expect(artifacts.getArtifactPath(Artifact.engineDartBinary), contains('.exe'));
+      expect(artifacts.getHostArtifact(HostArtifact.engineDartBinary).path, contains('.exe'));
     });
 
     testWithoutContext('Looks up windows UWP artifacts in host engine', () async {
@@ -342,7 +342,7 @@
     });
 
     testWithoutContext('Looks up dart on linux platforms', () async {
-      expect(artifacts.getArtifactPath(Artifact.engineDartBinary), isNot(contains('.exe')));
+      expect(artifacts.getHostArtifact(HostArtifact.engineDartBinary).path, isNot(contains('.exe')));
     });
   });
 }
diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart
index ac04676..3b0ca07 100644
--- a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart
@@ -80,7 +80,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -116,7 +116,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -152,7 +152,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -189,7 +189,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -228,7 +228,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -265,7 +265,7 @@
     final String build = androidEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
@@ -314,7 +314,7 @@
     final String build = testEnvironment.buildDir.path;
     processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
-        artifacts.getArtifactPath(Artifact.engineDartBinary),
+        artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
         '--disable-dart-dev',
         artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk),
         '--sdk-root',
diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart
index b0ec631..2bada9b 100644
--- a/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart
@@ -96,7 +96,7 @@
       outputPreferences: OutputPreferences.test(showColor: false),
     );
 
-    dartPath = artifacts.getArtifactPath(Artifact.engineDartBinary);
+    dartPath = artifacts.getHostArtifact(HostArtifact.engineDartBinary).path;
     constFinderPath = artifacts.getArtifactPath(Artifact.constFinder);
     fontSubsetPath = artifacts.getArtifactPath(Artifact.fontSubset);
 
diff --git a/packages/flutter_tools/test/general.shard/compile_batch_test.dart b/packages/flutter_tools/test/general.shard/compile_batch_test.dart
index 60ef33c..6415f58 100644
--- a/packages/flutter_tools/test/general.shard/compile_batch_test.dart
+++ b/packages/flutter_tools/test/general.shard/compile_batch_test.dart
@@ -54,7 +54,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-         'Artifact.engineDartBinary',
+         'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -99,7 +99,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-         'Artifact.engineDartBinary',
+         'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -144,7 +144,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-         'Artifact.engineDartBinary',
+         'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -189,7 +189,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-          'Artifact.engineDartBinary',
+          'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -236,7 +236,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-          'Artifact.engineDartBinary',
+          'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -283,7 +283,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-          'Artifact.engineDartBinary',
+          'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
@@ -334,7 +334,7 @@
       logger: logger,
       processManager: FakeProcessManager.list(<FakeCommand>[
         FakeCommand(command: const <String>[
-          'Artifact.engineDartBinary',
+          'HostArtifact.engineDartBinary',
           '--disable-dart-dev',
           'Artifact.frontendServerSnapshotForEngineDartSdk',
           '--sdk-root',
diff --git a/packages/flutter_tools/test/general.shard/compile_incremental_test.dart b/packages/flutter_tools/test/general.shard/compile_incremental_test.dart
index 896ab20..2d67f46 100644
--- a/packages/flutter_tools/test/general.shard/compile_incremental_test.dart
+++ b/packages/flutter_tools/test/general.shard/compile_incremental_test.dart
@@ -30,7 +30,7 @@
   FakeProcessManager fakeProcessManager;
 
   const List<String> frontendServerCommand = <String>[
-    'Artifact.engineDartBinary',
+    'HostArtifact.engineDartBinary',
     '--disable-dart-dev',
     'Artifact.frontendServerSnapshotForEngineDartSdk',
     '--sdk-root',
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart
index 89a63ef..04e6db5 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart
@@ -13,7 +13,6 @@
 import 'package:flutter_tools/src/base/file_system.dart';
 import 'package:flutter_tools/src/base/logger.dart';
 import 'package:flutter_tools/src/base/platform.dart';
-import 'package:flutter_tools/src/build_info.dart';
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/ios/devices.dart';
 import 'package:flutter_tools/src/ios/ios_deploy.dart';
@@ -29,7 +28,7 @@
 
   setUp(() {
     artifacts = Artifacts.test();
-    iosDeployPath = artifacts.getArtifactPath(Artifact.iosDeploy, platform: TargetPlatform.ios);
+    iosDeployPath = artifacts.getHostArtifact(HostArtifact.iosDeploy).path;
     fileSystem = MemoryFileSystem.test();
   });
 
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart
index 47a02f7..c047582 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart
@@ -33,7 +33,7 @@
 
   setUp(() {
     artifacts = Artifacts.test();
-    iosDeployPath = artifacts.getArtifactPath(Artifact.iosDeploy, platform: TargetPlatform.ios);
+    iosDeployPath = artifacts.getHostArtifact(HostArtifact.iosDeploy).path;
   });
 
   testWithoutContext('IOSDevice.installApp calls ios-deploy correctly with USB', () async {
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
index 7afe314..24d76f7 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
@@ -8,7 +8,6 @@
 
 import 'package:flutter_tools/src/artifacts.dart';
 import 'package:flutter_tools/src/base/logger.dart';
-import 'package:flutter_tools/src/build_info.dart';
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/convert.dart';
 import 'package:flutter_tools/src/device.dart';
@@ -35,7 +34,7 @@
     fakeCache = Cache.test(processManager: FakeProcessManager.any());
     artifacts = Artifacts.test();
     logger = BufferLogger.test();
-    ideviceSyslogPath = artifacts.getArtifactPath(Artifact.idevicesyslog, platform: TargetPlatform.ios);
+    ideviceSyslogPath = artifacts.getHostArtifact(HostArtifact.idevicesyslog).path;
   });
 
   group('syslog stream', () {
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
index e2a477e..87e76b4 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
@@ -76,7 +76,7 @@
 
   setUp(() {
     artifacts = Artifacts.test();
-    iosDeployPath = artifacts.getArtifactPath(Artifact.iosDeploy, platform: TargetPlatform.ios);
+    iosDeployPath = artifacts.getHostArtifact(HostArtifact.iosDeploy).path;
   });
 
   group('IOSDevice.startApp succeeds in release mode', () {
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
index c6b6a4b..8dd196f 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart
@@ -30,7 +30,7 @@
 // The command used to actually launch the app with args in release/profile.
 const FakeCommand kLaunchReleaseCommand = FakeCommand(
   command: <String>[
-    'Artifact.iosDeploy.TargetPlatform.ios',
+    'HostArtifact.iosDeploy',
     '--id',
     '123',
     '--bundle',
@@ -49,7 +49,7 @@
 
 // The command used to just launch the app with args in debug.
 const FakeCommand kLaunchDebugCommand = FakeCommand(command: <String>[
-  'Artifact.iosDeploy.TargetPlatform.ios',
+  'HostArtifact.iosDeploy',
   '--id',
   '123',
   '--bundle',
@@ -69,7 +69,7 @@
   '-t',
   '0',
   '/dev/null',
-  'Artifact.iosDeploy.TargetPlatform.ios',
+  'HostArtifact.iosDeploy',
   '--id',
   '123',
   '--bundle',
@@ -214,7 +214,7 @@
           '-t',
           '0',
           '/dev/null',
-          'Artifact.iosDeploy.TargetPlatform.ios',
+          'HostArtifact.iosDeploy',
           '--id',
           '123',
           '--bundle',
diff --git a/packages/flutter_tools/test/general.shard/ios/mac_test.dart b/packages/flutter_tools/test/general.shard/ios/mac_test.dart
index 9714ca9..dcabee5 100644
--- a/packages/flutter_tools/test/general.shard/ios/mac_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/mac_test.dart
@@ -56,7 +56,7 @@
         // Let `idevicescreenshot` fail with exit code 1.
         fakeProcessManager.addCommand(FakeCommand(
           command: <String>[
-            'Artifact.idevicescreenshot.TargetPlatform.ios',
+            'HostArtifact.idevicescreenshot',
             outputFile.path,
             '--udid',
             '1234',
@@ -85,7 +85,7 @@
       testWithoutContext('idevicescreenshot captures and returns USB screenshot', () async {
         fakeProcessManager.addCommand(FakeCommand(
           command: <String>[
-            'Artifact.idevicescreenshot.TargetPlatform.ios', outputFile.path, '--udid', '1234',
+            'HostArtifact.idevicescreenshot', outputFile.path, '--udid', '1234',
           ],
           environment: const <String, String>{'DYLD_LIBRARY_PATH': '/path/to/libraries'},
         ));
@@ -108,7 +108,7 @@
       testWithoutContext('idevicescreenshot captures and returns network screenshot', () async {
         fakeProcessManager.addCommand(FakeCommand(
           command: <String>[
-            'Artifact.idevicescreenshot.TargetPlatform.ios', outputFile.path, '--udid', '1234', '--network',
+            'HostArtifact.idevicescreenshot', outputFile.path, '--udid', '1234', '--network',
           ],
           environment: const <String, String>{'DYLD_LIBRARY_PATH': '/path/to/libraries'},
         ));
diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart
index 1f05d90..6b0fb4c 100644
--- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart
+++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart
@@ -2105,12 +2105,12 @@
     expect(residentCompiler.initializeFromDill,
       globals.fs.path.join(getBuildDirectory(), 'fbbe6a61fb7a1de317d381f8df4814e5.cache.dill'));
     expect(residentCompiler.librariesSpec,
-      globals.fs.file(globals.artifacts.getArtifactPath(Artifact.flutterWebLibrariesJson))
+      globals.fs.file(globals.artifacts.getHostArtifact(HostArtifact.flutterWebLibrariesJson))
         .uri.toString());
     expect(residentCompiler.targetModel, TargetModel.dartdevc);
     expect(residentCompiler.sdkRoot,
-      globals.artifacts.getArtifactPath(Artifact.flutterWebSdk, mode: BuildMode.debug) + '/');
-    expect(residentCompiler.platformDill, 'file:///Artifact.webPlatformKernelDill.debug');
+      globals.artifacts.getHostArtifact(HostArtifact.flutterWebSdk).path + '/');
+    expect(residentCompiler.platformDill, 'file:///HostArtifact.webPlatformKernelDill');
   }, overrides: <Type, Generator>{
     Artifacts: () => Artifacts.test(),
     FileSystem: () => MemoryFileSystem.test(),
@@ -2136,12 +2136,12 @@
     expect(residentCompiler.initializeFromDill,
       globals.fs.path.join(getBuildDirectory(), '825b8f791aa86c5057fff6f064542c54.cache.dill'));
     expect(residentCompiler.librariesSpec,
-      globals.fs.file(globals.artifacts.getArtifactPath(Artifact.flutterWebLibrariesJson))
+      globals.fs.file(globals.artifacts.getHostArtifact(HostArtifact.flutterWebLibrariesJson))
         .uri.toString());
     expect(residentCompiler.targetModel, TargetModel.dartdevc);
     expect(residentCompiler.sdkRoot,
-      globals.artifacts.getArtifactPath(Artifact.flutterWebSdk, mode: BuildMode.debug) + '/');
-    expect(residentCompiler.platformDill, 'file:///Artifact.webPlatformSoundKernelDill.debug');
+      globals.artifacts.getHostArtifact(HostArtifact.flutterWebSdk).path + '/');
+    expect(residentCompiler.platformDill, 'file:///HostArtifact.webPlatformSoundKernelDill');
   }, overrides: <Type, Generator>{
     Artifacts: () => Artifacts.test(),
     FileSystem: () => MemoryFileSystem.test(),
diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart
index 2c3f75d..d949bb9 100644
--- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart
+++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart
@@ -639,13 +639,13 @@
     final Uri uri = await webDevFS.create();
     webDevFS.webAssetServer.entrypointCacheDirectory = globals.fs.currentDirectory;
     final String webPrecompiledSdk = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledSdk);
+      .getHostArtifact(HostArtifact.webPrecompiledSdk).path;
     final String webPrecompiledSdkSourcemaps = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledSdkSourcemaps);
+      .getHostArtifact(HostArtifact.webPrecompiledSdkSourcemaps).path;
     final String webPrecompiledCanvaskitSdk = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledCanvaskitSdk);
+      .getHostArtifact(HostArtifact.webPrecompiledCanvaskitSdk).path;
     final String webPrecompiledCanvaskitSdkSourcemaps = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledCanvaskitSdkSourcemaps);
+      .getHostArtifact(HostArtifact.webPrecompiledCanvaskitSdkSourcemaps).path;
     globals.fs.currentDirectory
       .childDirectory('lib')
       .childFile('web_entrypoint.dart')
@@ -762,13 +762,13 @@
       ..createSync(recursive: true)
       ..writeAsStringSync('GENERATED');
     final String webPrecompiledSdk = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledSoundSdk);
+      .getHostArtifact(HostArtifact.webPrecompiledSoundSdk).path;
     final String webPrecompiledSdkSourcemaps = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledSoundSdkSourcemaps);
+      .getHostArtifact(HostArtifact.webPrecompiledSoundSdkSourcemaps).path;
     final String webPrecompiledCanvaskitSdk = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdk);
+      .getHostArtifact(HostArtifact.webPrecompiledCanvaskitSoundSdk).path;
     final String webPrecompiledCanvaskitSdkSourcemaps = globals.artifacts
-      .getArtifactPath(Artifact.webPrecompiledCanvaskitSoundSdkSourcemaps);
+      .getHostArtifact(HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps).path;
     globals.fs.file(webPrecompiledSdk)
       ..createSync(recursive: true)
       ..writeAsStringSync('HELLO');
diff --git a/packages/flutter_tools/test/integration.shard/generated_plugin_registrant_test.dart b/packages/flutter_tools/test/integration.shard/generated_plugin_registrant_test.dart
index 7fc9e2c..83c8021 100644
--- a/packages/flutter_tools/test/integration.shard/generated_plugin_registrant_test.dart
+++ b/packages/flutter_tools/test/integration.shard/generated_plugin_registrant_test.dart
@@ -233,7 +233,7 @@
   ];
 
   final ProcessResult exec = await Process.run(
-    globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+    globals.artifacts.getHostArtifact(HostArtifact.engineDartBinary).path,
     args,
     workingDirectory: workingDir.path,
   );