Refactor all the commands to be Commands from the Args package.  Also use CommandRunner for the top-level command.
diff --git a/packages/flutter_tools/lib/src/install.dart b/packages/flutter_tools/lib/src/install.dart
index 56583da..93943ae 100644
--- a/packages/flutter_tools/lib/src/install.dart
+++ b/packages/flutter_tools/lib/src/install.dart
@@ -6,32 +6,19 @@
 
 import 'dart:async';
 
-import 'package:args/args.dart';
+import 'package:args/command_runner.dart';
 
 import 'application_package.dart';
-import 'common.dart';
 import 'device.dart';
 
-class InstallCommandHandler extends CommandHandler {
+class InstallCommand extends Command {
+  final name = 'install';
+  final description = 'Install your Flutter app on attached devices.';
   AndroidDevice android = null;
-  InstallCommandHandler([this.android])
-      : super('install', 'Install your Sky app on attached devices.');
+  InstallCommand([this.android]);
 
   @override
-  ArgParser get parser {
-    ArgParser parser = new ArgParser();
-    parser.addFlag('help',
-        abbr: 'h', negatable: false, help: 'Display this help message.');
-    return parser;
-  }
-
-  @override
-  Future<int> processArgResults(ArgResults results) async {
-    if (results['help']) {
-      printUsage();
-      return 0;
-    }
-
+  Future<int> run() async {
     bool installedSomewhere = false;
 
     Map<BuildPlatform, ApplicationPackage> packages =