make the apk building part of flutter run optional (#5301)
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index fed2bb0..a32b8d0 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -56,6 +56,9 @@ help: 'Start in a paused mode and wait for a debugger to connect.'); argParser.addOption('debug-port', help: 'Listen to the given port for a debug connection (defaults to $kDefaultObservatoryPort).'); + argParser.addFlag('build', + defaultsTo: true, + help: 'If necessary, build the app before running.'); usesPubOption(); // Option to enable hot reloading. @@ -171,7 +174,7 @@ ); } - return runner.run(route: route); + return runner.run(route: route, shouldBuild: argResults['build']); } }
diff --git a/packages/flutter_tools/lib/src/hot.dart b/packages/flutter_tools/lib/src/hot.dart index 2bf962c..ac6e772 100644 --- a/packages/flutter_tools/lib/src/hot.dart +++ b/packages/flutter_tools/lib/src/hot.dart
@@ -76,12 +76,17 @@ } @override - Future<int> run({ Completer<int> observatoryPortCompleter, String route }) { + Future<int> run({ + Completer<int> observatoryPortCompleter, + String route, + bool shouldBuild: true + }) { // Don't let uncaught errors kill the process. return runZoned(() { return _run( observatoryPortCompleter: observatoryPortCompleter, - route: route + route: route, + shouldBuild: shouldBuild ); }, onError: (dynamic error, StackTrace stackTrace) { printError('Exception from flutter run: $error', stackTrace); @@ -90,7 +95,8 @@ Future<int> _run({ Completer<int> observatoryPortCompleter, - String route + String route, + bool shouldBuild: true }) async { _mainPath = findMainDartFile(target); if (!FileSystemEntity.isFileSync(_mainPath)) { @@ -113,7 +119,7 @@ } // TODO(devoncarew): We shouldn't have to do type checks here. - if (device is AndroidDevice) { + if (shouldBuild && device is AndroidDevice) { printTrace('Running build command.'); int result = await buildApk(
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 0d405d6..8ce55ac 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -31,7 +31,11 @@ StreamSubscription<String> _loggingSubscription; /// Start the app and keep the process running during its lifetime. - Future<int> run({ Completer<int> observatoryPortCompleter, String route }); + Future<int> run({ + Completer<int> observatoryPortCompleter, + String route, + bool shouldBuild: true + }); Future<bool> restart();
diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart index d921b71..1b4f2e8 100644 --- a/packages/flutter_tools/lib/src/run.dart +++ b/packages/flutter_tools/lib/src/run.dart
@@ -36,14 +36,19 @@ bool benchmark; @override - Future<int> run({ Completer<int> observatoryPortCompleter, String route }) { + Future<int> run({ + Completer<int> observatoryPortCompleter, + String route, + bool shouldBuild: true + }) { // Don't let uncaught errors kill the process. return runZoned(() { return _run( traceStartup: traceStartup, benchmark: benchmark, observatoryPortCompleter: observatoryPortCompleter, - route: route + route: route, + shouldBuild: shouldBuild ); }, onError: (dynamic error, StackTrace stackTrace) { printError('Exception from flutter run: $error', stackTrace); @@ -88,7 +93,8 @@ bool traceStartup: false, bool benchmark: false, Completer<int> observatoryPortCompleter, - String route + String route, + bool shouldBuild: true }) async { _mainPath = findMainDartFile(target); if (!FileSystemEntity.isFileSync(_mainPath)) { @@ -113,7 +119,7 @@ Stopwatch startTime = new Stopwatch()..start(); // TODO(devoncarew): We shouldn't have to do type checks here. - if (device is AndroidDevice) { + if (shouldBuild && device is AndroidDevice) { printTrace('Running build command.'); int result = await buildApk(