Index: build/android/pylib/gtest/test_package_apk.py |
diff --git a/build/android/pylib/gtest/test_package_apk.py b/build/android/pylib/gtest/test_package_apk.py |
index 64e233e76e28b535f224c1fe2b6e1a09a211ab62..87e4445bd9cc55959dbbc4621dfd30b7b1859a74 100644 |
--- a/build/android/pylib/gtest/test_package_apk.py |
+++ b/build/android/pylib/gtest/test_package_apk.py |
@@ -115,12 +115,23 @@ class TestPackageApk(TestPackage): |
logfile = android_commands.NewLineNormalizer(sys.stdout) |
return self._WatchTestOutput(self._WatchFifo(timeout=10, logfile=logfile)) |
+ def _NeedsInstall(self): |
+ pm_path_output = self.adb.RunShellCommand( |
+ 'pm path ' + self._apk_package_name) |
+ if not pm_path_output: |
+ return True |
+ # pm_path_output is of the form: "package:/path/to/foo.apk" |
+ installed_apk_path = pm_path_output[0].split(':')[1] |
+ return not self.adb.CheckMd5Sum( |
+ self.test_suite_full, installed_apk_path, ignore_paths=True) |
+ |
def StripAndCopyExecutable(self): |
self.tool.CopyFiles() |
- # Always uninstall the previous one (by activity name); we don't |
- # know what was embedded in it. |
- self.adb.ManagedInstall(self.test_suite_full, False, |
- package_name=self._apk_package_name) |
+ if self._NeedsInstall(): |
+ # Always uninstall the previous one (by activity name); we don't |
+ # know what was embedded in it. |
+ self.adb.ManagedInstall(self.test_suite_full, False, |
+ package_name=self._apk_package_name) |
def _GetTestSuiteBaseName(self): |
"""Returns the base name of the test suite.""" |