Switch flutter_tools from script to app-jit snapshot. (#27749)

diff --git a/bin/flutter b/bin/flutter
index b626802..178994f 100755
--- a/bin/flutter
+++ b/bin/flutter
@@ -121,7 +121,7 @@
 
     retry_upgrade
 
-    "$DART" --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.packages" "$SCRIPT_PATH"
+    "$DART" --snapshot="$SNAPSHOT_PATH" --snapshot-kind=app-jit --packages="$FLUTTER_TOOLS_DIR/.packages" "$SCRIPT_PATH" training
     echo "$revision" > "$STAMP_PATH"
   fi
   # The exit here is duplicitous since the function is run in a subshell,
diff --git a/bin/flutter.bat b/bin/flutter.bat
index cff515a..7aa7020 100644
--- a/bin/flutter.bat
+++ b/bin/flutter.bat
@@ -152,7 +152,7 @@
 
     POPD
 
-    "%dart%" --snapshot="%snapshot_path%" --packages="%flutter_tools_dir%\.packages" "%script_path%"
+    "%dart%" --snapshot="%snapshot_path%" --snapshot-kind=app-jit --packages="%flutter_tools_dir%\.packages" "%script_path%"
     IF "%ERRORLEVEL%" NEQ "0" (
       ECHO Error: Unable to create dart snapshot for flutter tool.
       SET exit_code=%ERRORLEVEL%
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 8a2fde4..59f19e8 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -181,7 +181,6 @@
   await _buildRunnerTest(
     path.join(flutterRoot, 'packages', 'flutter_tools'),
     flutterRoot,
-    enableFlutterToolAsserts: true,
     tableData: bigqueryApi?.tabledata,
   );
 
@@ -713,4 +712,4 @@
   }
   // note: this also covers plugin_test_win as long as Windows has an Android SDK available.
   await _runDevicelabTest('plugin_test', env: env);
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 1415fa5..f5a5340 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -38,6 +38,7 @@
 import 'src/commands/stop.dart';
 import 'src/commands/test.dart';
 import 'src/commands/trace.dart';
+import 'src/commands/train.dart';
 import 'src/commands/update_packages.dart';
 import 'src/commands/upgrade.dart';
 import 'src/commands/version.dart';
@@ -84,6 +85,7 @@
     StopCommand(),
     TestCommand(verboseHelp: verboseHelp),
     TraceCommand(),
+    TrainingCommand(),
     UpdatePackagesCommand(hidden: !verboseHelp),
     UpgradeCommand(),
     VersionCommand(),
diff --git a/packages/flutter_tools/lib/src/commands/train.dart b/packages/flutter_tools/lib/src/commands/train.dart
new file mode 100644
index 0000000..9bd0be5
--- /dev/null
+++ b/packages/flutter_tools/lib/src/commands/train.dart
@@ -0,0 +1,27 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import '../runner/flutter_command.dart';
+
+/// This command is run when generating the app-jit snapshot for the tool, so it cannot access the Cache
+/// or any artifacts that haven't been downloaded yet.
+class TrainingCommand extends FlutterCommand {
+  @override
+  String get description => 'training run for app-jit snapshot';
+
+  @override
+  String get name => 'training';
+
+  @override
+  bool get hidden => true;
+
+  @override
+  bool get shouldUpdateCache => false;
+
+  @override
+  Future<FlutterCommandResult> runCommand() async {
+    // This command does not do anything yet :).
+    return null;
+  }
+}