Fix runtest --path for tests built against SDK.

Bug 4556556

Change-Id: I3f829cae8f9fc1e64b3a44ac9e306b13b3cead7c
diff --git a/testrunner/android_manifest.py b/testrunner/android_manifest.py
index 5825118..6e8bd6c 100644
--- a/testrunner/android_manifest.py
+++ b/testrunner/android_manifest.py
@@ -34,7 +34,7 @@
 
   def __init__(self, app_path=None):
     if app_path:
-      self.ParseManifest(app_path)
+      self._ParseManifest(app_path)
 
   def GetAppPath(self):
     """Retrieve file system path to this manifest file's directory."""
@@ -51,7 +51,7 @@
       return None
     return manifest.getAttribute('package')
 
-  def ParseManifest(self, app_path):
+  def _ParseManifest(self, app_path):
     """Parse AndroidManifest.xml at the specified path.
 
     Args:
@@ -108,3 +108,20 @@
     """Saves the manifest to disk."""
     self._dom.writexml(open(self._manifest_path, mode='w'), encoding='utf-8')
 
+
+def CreateAndroidManifest(path):
+  """Factory method for creating a AndroidManifest.
+
+  Args:
+    path: the directory for the manifest file
+
+  Return:
+    the AndroidManifest or None if there was no file present
+  """
+  manifest_path = os.path.join(path, AndroidManifest.FILENAME)
+  if os.path.isfile(manifest_path):
+    manifest = AndroidManifest()
+    manifest._ParseManifest(path)
+    return manifest
+  else:
+    return None
diff --git a/testrunner/test_defs/instrumentation_test.py b/testrunner/test_defs/instrumentation_test.py
index 64182a4..6f82456 100644
--- a/testrunner/test_defs/instrumentation_test.py
+++ b/testrunner/test_defs/instrumentation_test.py
@@ -199,6 +199,17 @@
                (total_count, fail_count, error_count))
 
 
+def HasInstrumentationTest(path):
+  """Determine if given path defines an instrumentation test.
+
+  Args:
+    path: file system path to instrumentation test.
+  """
+  manifest_parser = android_manifest.CreateAndroidManifest(path)
+  if manifest_parser:
+    return manifest_parser.GetInstrumentationNames()
+  return False
+
 class InstrumentationTestFactory(test_suite.AbstractTestFactory):
   """A factory for creating InstrumentationTestSuites"""
 
diff --git a/testrunner/test_defs/test_walker.py b/testrunner/test_defs/test_walker.py
index de93c80..2989125 100755
--- a/testrunner/test_defs/test_walker.py
+++ b/testrunner/test_defs/test_walker.py
@@ -191,7 +191,7 @@
     """
     if android_mk_parser.HasGTest():
       return gtest.GTestFactory(path, upstream_build_path=upstream_build_path)
-    elif android_mk_parser.HasJavaLibrary('android.test.runner'):
+    elif instrumentation_test.HasInstrumentationTest(path):
       return instrumentation_test.InstrumentationTestFactory(path,
           upstream_build_path=upstream_build_path)
     else: