Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: build/android/pylib/android_commands.py

Issue 10824227: Organize adb install cmds and reboot on failure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: build/android/pylib/android_commands.py
diff --git a/build/android/pylib/android_commands.py b/build/android/pylib/android_commands.py
index da87f39f4dae86130a6507681404fa322fc808f0..3b38ab4e29a218e21ac14b0f174ef1d4a9149005 100644
--- a/build/android/pylib/android_commands.py
+++ b/build/android/pylib/android_commands.py
@@ -286,12 +286,14 @@ class AndroidCommands(object):
if os.environ.get('USING_HIVE'):
logging.warning('Ignoring reboot request as we are on hive')
return
- if full_reboot:
+ if full_reboot or not self.IsRootEnabled():
self._adb.SendCommand('reboot')
+ timeout = 300
else:
self.RestartShell()
+ timeout = 120
self.WaitForDevicePm()
- self.StartMonitoringLogcat(timeout=120)
+ self.StartMonitoringLogcat(timeout=timeout)
self.WaitForLogMatch(BOOT_COMPLETE_RE, None)
def Uninstall(self, package):
@@ -305,24 +307,58 @@ class AndroidCommands(object):
"""
uninstall_command = 'uninstall %s' % package
- logging.info('>>> $' + uninstall_command)
- return self._adb.SendCommand(uninstall_command, timeout_time=60)
+ return self._adb.SendCommand(uninstall_command, timeout_time=60,
+ cmd_logger=logging)
- def Install(self, package_file_path):
+ def Install(self, package_file_path, reinstall=False, retry_count=3):
"""Installs the specified package to the device.
Args:
package_file_path: Path to .apk file to install.
+ reinstall: Whether to reinstall over existing package
bulach 2012/08/09 12:36:52 nit: remove retry_count from 313, since it's undoc
Returns:
A status string returned by adb install
"""
assert os.path.isfile(package_file_path)
- install_command = 'install %s' % package_file_path
+ if reinstall:
+ install_cmd = 'install -r %s'
+ else:
+ install_cmd = 'install %s'
+
+ return self._adb.SendCommand(install_cmd % package_file_path,
+ timeout_time=2*60, cmd_logger=logging,
bulach 2012/08/09 12:36:52 nit: I think it needs space around *, timeout_time
Isaac (away) 2012/08/10 04:44:35 It's like this a couple other places in this file.
+ retry_count=3)
+
+ def ManagedInstall(self, apk_path, keep_data, package_name=None,
+ reboots_on_failure=2):
+ """Installs the specified package to the device. Reboots the device on
+ package manager timeouts.
- logging.info('>>> $' + install_command)
- return self._adb.SendCommand(install_command, timeout_time=2*60)
+ Args:
+ apk_path: Path to .apk file to install.
+ keep_data: Whether to keep data if package already exists
+ package_name: Package name (only needed if keep_data=False
bulach 2012/08/09 12:36:52 nit: )
+ reboots_on_failure: number of time to reboot if package manager is frozen.
+
+ Returns:
+ A status string returned by adb install
+ """
+ reboots_left = reboots_on_failure
+ while True:
+ try:
+ if not keep_data:
+ self.Uninstall(package_name)
+ install_status = self.Install(apk_path, keep_data, retry_count=0)
+ if 'Success' in install_status:
+ return install_status
+ except errors.WaitForResponseTimedOutError:
+ if reboots_left < 0:
bulach 2012/08/09 12:36:52 nit: seems that this should be <= 0, that is, pass
+ raise
+ # Force a hard reboot on last attempt
+ self.Reboot(full_reboot=(reboots_left==0))
bulach 2012/08/09 12:36:52 nit: space around ==
+ reboots_left -= 1
def MakeSystemFolderWritable(self):
"""Remounts the /system folder rw. """
@@ -385,7 +421,6 @@ class AndroidCommands(object):
logging.info('Waiting for SD card ready...')
sdcard_ready = False
attempts = 0
- wait_period = 5
while not sdcard_ready and attempts * wait_period < timeout_time:
output = self.RunShellCommand('ls /sdcard/')
if len(output) > 0:
@@ -415,10 +450,9 @@ class AndroidCommands(object):
Returns:
list containing the lines of output received from running the command
"""
- logging.info('>>> $' + command)
if "'" in command: logging.warning(command + " contains ' quotes")
- result = self._adb.SendShellCommand("'%s'" % command,
- timeout_time).splitlines()
+ result = self._adb.SendShellCommand("'%s'" % command, timeout_time,
+ cmd_logger=logging).splitlines()
if log_result:
logging.info('\n>>> '.join(result))
return result
@@ -480,7 +514,6 @@ class AndroidCommands(object):
cmd += ' --start-profiler ' + trace_file_name
self.RunShellCommand(cmd)
-
def CloseApplication(self, package):
"""Attempt to close down the application, using increasing violence.
@@ -540,8 +573,8 @@ class AndroidCommands(object):
# NOTE: We can't use adb_interface.Push() because it hardcodes a timeout of
# 60 seconds which isn't sufficient for a lot of users of this method.
push_command = 'push %s %s' % (local_path, device_path)
- logging.info('>>> $' + push_command)
- output = self._adb.SendCommand(push_command, timeout_time=30*60)
+ output = self._adb.SendCommand(push_command, timeout_time=30*60,
+ cmd_logger=logging)
assert output
# Success looks like this: "3035 KB/s (12512056 bytes in 4.025s)"
# Errors look like this: "failed to copy ... "

Powered by Google App Engine
This is Rietveld 408576698