Bit: use exec-out instead of shell

By switching to 'adb exec-out' instead of 'adb shell', characters such
as # no longer need to be escaped when executing a single
instrumentation method. The new syntax is simply

  $ bit module:class#method

Note: the old syntax (module:class\#method) still works.

Test: manual: bit InternalTests:android.app.WallpaperColorsTest#colorHintsTest, test should execute
Change-Id: I8c86faf2ccaf84834030f6ba7567cb4cecd37bc6
diff --git a/tools/bit/adb.cpp b/tools/bit/adb.cpp
index f521a63..201028b 100644
--- a/tools/bit/adb.cpp
+++ b/tools/bit/adb.cpp
@@ -73,7 +73,7 @@
 get_system_property(const string& name, int* err)
 {
     Command cmd("adb");
-    cmd.AddArg("shell");
+    cmd.AddArg("exec-out");
     cmd.AddArg("getprop");
     cmd.AddArg(name);
 
@@ -278,7 +278,7 @@
         InstrumentationCallbacks* callbacks)
 {
     Command cmd("adb");
-    cmd.AddArg("shell");
+    cmd.AddArg("exec-out");
     cmd.AddArg("am");
     cmd.AddArg("instrument");
     cmd.AddArg("-w");
diff --git a/tools/bit/main.cpp b/tools/bit/main.cpp
index fd184f5..b01737d 100644
--- a/tools/bit/main.cpp
+++ b/tools/bit/main.cpp
@@ -278,7 +278,7 @@
                 line << " of " << testCount;
             }
         }
-        line << ": " << m_currentAction->target->name << ':' << className << "\\#" << testName;
+        line << ": " << m_currentAction->target->name << ':' << className << "#" << testName;
         print_one_line("%s", line.str().c_str());
     } else if ((resultCode == -1) || (resultCode == -2)) {
         // test failed
@@ -286,9 +286,9 @@
         // all as "failures".
         m_currentAction->failCount++;
         m_currentAction->target->testFailCount++;
-        printf("%s\n%sFailed: %s:%s\\#%s%s\n", g_escapeClearLine, g_escapeRedBold,
-                m_currentAction->target->name.c_str(), className.c_str(),
-                testName.c_str(), g_escapeEndColor);
+        printf("%s\n%sFailed: %s:%s#%s%s\n", g_escapeClearLine, g_escapeRedBold,
+               m_currentAction->target->name.c_str(), className.c_str(), testName.c_str(),
+               g_escapeEndColor);
 
         bool stackFound;
         string stack = get_bundle_string(results, &stackFound, "stack", NULL);
@@ -403,11 +403,14 @@
     fprintf(out, "      Builds and installs CtsProtoTestCases.apk, and runs all the\n");
     fprintf(out, "      tests in the ProtoOutputStreamBoolTest class.\n");
     fprintf(out, "\n");
-    fprintf(out, "    bit CtsProtoTestCases:.ProtoOutputStreamBoolTest\\#testWrite\n");
+    fprintf(out, "    bit CtsProtoTestCases:.ProtoOutputStreamBoolTest#testWrite\n");
     fprintf(out, "      Builds and installs CtsProtoTestCases.apk, and runs the testWrite\n");
     fprintf(out, "      test method on that class.\n");
     fprintf(out, "\n");
-    fprintf(out, "    bit CtsProtoTestCases:.ProtoOutputStreamBoolTest\\#testWrite,.ProtoOutputStreamBoolTest\\#testRepeated\n");
+    fprintf(out,
+            "    bit "
+            "CtsProtoTestCases:.ProtoOutputStreamBoolTest#testWrite,.ProtoOutputStreamBoolTest#"
+            "testRepeated\n");
     fprintf(out, "      Builds and installs CtsProtoTestCases.apk, and runs the testWrite\n");
     fprintf(out, "      and testRepeated test methods on that class.\n");
     fprintf(out, "\n");
@@ -812,7 +815,7 @@
 
             // Stop & Sync
             if (!options.noRestart) {
-                err = run_adb("shell", "stop", NULL);
+                err = run_adb("exec-out", "stop", NULL);
                 check_error(err);
             }
             err = run_adb("remount", NULL);
@@ -831,9 +834,9 @@
                 } else {
                     print_status("Restarting the runtime");
 
-                    err = run_adb("shell", "setprop", "sys.boot_completed", "0", NULL);
+                    err = run_adb("exec-out", "setprop", "sys.boot_completed", "0", NULL);
                     check_error(err);
-                    err = run_adb("shell", "start", NULL);
+                    err = run_adb("exec-out", "start", NULL);
                     check_error(err);
                 }
 
@@ -846,7 +849,7 @@
                     sleep(2);
                 }
                 sleep(1);
-                err = run_adb("shell", "wm", "dismiss-keyguard", NULL);
+                err = run_adb("exec-out", "wm", "dismiss-keyguard", NULL);
                 check_error(err);
             }
         }
@@ -863,7 +866,7 @@
                 continue;
             }
             // TODO: if (!apk.file.fileInfo.exists || apk.file.HasChanged())
-            err = run_adb("shell", "mkdir", "-p", dir.c_str(), NULL);
+            err = run_adb("exec-out", "mkdir", "-p", dir.c_str(), NULL);
             check_error(err);
             err = run_adb("push", pushed.file.filename.c_str(), pushed.dest.c_str(), NULL);
             check_error(err);
@@ -945,9 +948,9 @@
                         }
                     }
                     if (runAll) {
-                        err = run_adb("shell", installedPath.c_str(), NULL);
+                        err = run_adb("exec-out", installedPath.c_str(), NULL);
                     } else {
-                        err = run_adb("shell", installedPath.c_str(), filterArg.c_str(), NULL);
+                        err = run_adb("exec-out", installedPath.c_str(), filterArg.c_str(), NULL);
                     }
                     if (err == 0) {
                         target->testPassCount++;
@@ -1073,7 +1076,7 @@
 
         const ActivityAction& action = activityActions[0];
         string componentName = action.packageName + "/" + action.className;
-        err = run_adb("shell", "am", "start", componentName.c_str(), NULL);
+        err = run_adb("exec-out", "am", "start", componentName.c_str(), NULL);
         check_error(err);
     }