Unverified Commit 7e4038fe authored by Danny Tuppeny's avatar Danny Tuppeny Committed by GitHub

Expose emulator creation to daemon API (#18905)

* Fix typo

* Add emulator.create to Daemon API

* Swap order of daemon changelog entries
parent a8d97a6d
......@@ -188,10 +188,22 @@ Return a list of all available emulators. The `params` field will be a List; eac
#### emulator.launch
The `launch()` command takes allows launching an emulator/simulator by its `id`.
The `launch()` command allows launching an emulator/simulator by its `id`.
- `emulatorId`: the id of an emulator as returned by `getEmulators`.
#### emulator.create
The `create()` command creates a new Android emulator with an optional `name`.
- `name`: an optional name for this emulator
The returned `params` will contain:
- `success` - whether the emulator was successfully created
- `emulatorName` - the name of the emulator created; this will have been auto-generated if you did not supply one
- `error` - when `success`=`false`, a message explaining why the creation of the emulator failed
## Flutter Run --machine
When running `flutter run --machine` the following subset of the daemon is available:
......@@ -229,4 +241,5 @@ See the [source](https://github.com/flutter/flutter/blob/master/packages/flutter
## Changelog
- 0.4.0: Added `emulator.create` command
- 0.3.0: Added `daemon.connected` event at startup
......@@ -28,7 +28,7 @@ import '../runner/flutter_command.dart';
import '../tester/flutter_tester.dart';
import '../vmservice.dart';
const String protocolVersion = '0.3.0';
const String protocolVersion = '0.4.0';
/// A server process command. This command will start up a long-lived server.
/// It reads JSON-RPC based commands from stdin, executes them, and returns
......@@ -849,6 +849,7 @@ class EmulatorDomain extends Domain {
EmulatorDomain(Daemon daemon) : super(daemon, 'emulator') {
registerHandler('getEmulators', getEmulators);
registerHandler('launch', launch);
registerHandler('create', create);
}
Future<List<Map<String, dynamic>>> getEmulators([Map<String, dynamic> args]) async {
......@@ -868,6 +869,16 @@ class EmulatorDomain extends Domain {
await matches.first.launch();
}
}
Future<Map<String, dynamic>> create(Map<String, dynamic> args) async {
final String name = _getStringArg(args, 'name', required: false);
final CreateEmulatorResult res = await emulators.createEmulator(name: name);
return <String, dynamic>{
'success': res.success,
'emulatorName': res.emulatorName,
'error': res.error,
};
}
}
/// A [Logger] which sends log messages to a listening daemon client.
......
......@@ -98,12 +98,15 @@ class EmulatorManager {
// - Removes lines that say "null" (!)
// - Removes lines that tell the user to use '--force' to overwrite emulators
String cleanError(String error) {
return (error ?? '')
if (error == null || error.trim() == '')
return null;
return error
.split('\n')
.where((String l) => l.trim() != 'null')
.where((String l) =>
l.trim() != 'Use --force if you want to replace it.')
.join('\n');
.join('\n')
.trim();
}
final List<String> args = <String>[
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment