diff --git a/packages/flutter_tools/lib/src/commands/run_mojo.dart b/packages/flutter_tools/lib/src/commands/run_mojo.dart index f19c208054d..cf2d535d6ad 100644 --- a/packages/flutter_tools/lib/src/commands/run_mojo.dart +++ b/packages/flutter_tools/lib/src/commands/run_mojo.dart @@ -86,7 +86,7 @@ class RunMojoCommand extends FlutterCommand { return result; } - Future> _getShellConfig(String bundlePath) async { + Future> _getShellConfig(String targetApp) async { List args = []; final bool useDevtools = _useDevtools(); @@ -94,7 +94,6 @@ class RunMojoCommand extends FlutterCommand { args.add(command); BuildConfiguration config = _getCurrentHostConfig(); - final String appPath = _makePathAbsolute(bundlePath); String flutterPath; if (config == null || config.type == BuildType.prebuilt) { @@ -108,17 +107,30 @@ class RunMojoCommand extends FlutterCommand { if (argResults['android']) { args.add('--android'); - final String appName = path.basename(appPath); - final String appDir = path.dirname(appPath); - args.add('mojo:launcher http://app/$appName'); - args.add('--map-origin=http://app/=$appDir'); + } + final Uri appUri = Uri.parse(targetApp); + if (appUri.scheme.isEmpty || appUri.scheme == 'file') { + final String appPath = _makePathAbsolute(targetApp); + if (argResults['android']) { + final String appName = path.basename(appPath); + final String appDir = path.dirname(appPath); + args.add('mojo:launcher http://app/$appName'); + args.add('--map-origin=http://app/=$appDir'); + } else { + args.add('mojo:launcher file://$appPath'); + } + } else { + args.add('mojo:launcher $targetApp'); + } + + // Add url-mapping for mojo:flutter. + if (argResults['android']) { final String flutterName = path.basename(flutterPath); final String flutterDir = path.dirname(flutterPath); args.add('--map-origin=http://flutter/=$flutterDir'); args.add('--url-mappings=mojo:flutter=http://flutter/$flutterName'); } else { - args.add('mojo:launcher file://$appPath'); args.add('--url-mappings=mojo:flutter=file://$flutterPath'); } @@ -152,21 +164,21 @@ class RunMojoCommand extends FlutterCommand { await downloadToolchain(); - String bundlePath = argResults['app']; - if (bundlePath == null) { - bundlePath = _kDefaultBundlePath; + String targetApp = argResults['app']; + if (targetApp == null) { + targetApp = _kDefaultBundlePath; String mainPath = findMainDartFile(argResults['target']); int result = await flx.build( toolchain, mainPath: mainPath, - outputPath: bundlePath + outputPath: targetApp ); if (result != 0) return result; } - return await runCommandAndStreamOutput(await _getShellConfig(bundlePath)); + return await runCommandAndStreamOutput(await _getShellConfig(targetApp)); } }