OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """This module wraps Android's adb tool. | 5 """This module wraps Android's adb tool. |
6 | 6 |
7 This is a thin wrapper around the adb interface. Any additional complexity | 7 This is a thin wrapper around the adb interface. Any additional complexity |
8 should be delegated to a higher level (ex. DeviceUtils). | 8 should be delegated to a higher level (ex. DeviceUtils). |
9 """ | 9 """ |
10 | 10 |
11 import errno | 11 import errno |
| 12 import logging |
12 import os | 13 import os |
13 | 14 |
14 from pylib import cmd_helper | 15 from pylib import cmd_helper |
15 from pylib import constants | 16 from pylib import constants |
16 from pylib.device import decorators | 17 from pylib.device import decorators |
17 from pylib.device import device_errors | 18 from pylib.device import device_errors |
18 from pylib.utils import timeout_retry | 19 from pylib.utils import timeout_retry |
19 | 20 |
20 | 21 |
21 _DEFAULT_TIMEOUT = 30 | 22 _DEFAULT_TIMEOUT = 30 |
(...skipping 15 matching lines...) Expand all Loading... |
37 | 38 |
38 class AdbWrapper(object): | 39 class AdbWrapper(object): |
39 """A wrapper around a local Android Debug Bridge executable.""" | 40 """A wrapper around a local Android Debug Bridge executable.""" |
40 | 41 |
41 def __init__(self, device_serial): | 42 def __init__(self, device_serial): |
42 """Initializes the AdbWrapper. | 43 """Initializes the AdbWrapper. |
43 | 44 |
44 Args: | 45 Args: |
45 device_serial: The device serial number as a string. | 46 device_serial: The device serial number as a string. |
46 """ | 47 """ |
| 48 if not device_serial: |
| 49 raise ValueError('A device serial must be specified') |
47 self._device_serial = str(device_serial) | 50 self._device_serial = str(device_serial) |
48 | 51 |
49 # pylint: disable=unused-argument | 52 # pylint: disable=unused-argument |
50 @classmethod | 53 @classmethod |
51 @decorators.WithTimeoutAndRetries | 54 @decorators.WithTimeoutAndRetries |
52 def _RunAdbCmd(cls, arg_list, timeout=None, retries=None, check_error=True): | 55 def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None, |
53 cmd = [constants.GetAdbPath()] + arg_list | 56 check_error=True): |
54 exit_code, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( | 57 cmd = [constants.GetAdbPath()] |
55 cmd, timeout_retry.CurrentTimeoutThread().GetRemainingTime()) | 58 if device_serial is not None: |
56 if exit_code != 0: | 59 cmd.extend(['-s', device_serial]) |
| 60 cmd.extend(args) |
| 61 status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout( |
| 62 cmd, timeout_retry.CurrentTimeoutThread().GetRemainingTime()) |
| 63 if status != 0: |
57 raise device_errors.AdbCommandFailedError( | 64 raise device_errors.AdbCommandFailedError( |
58 cmd, 'returned non-zero exit code %d and output %r' % | 65 args, output, status, device_serial) |
59 (exit_code, output)) | |
60 # This catches some errors, including when the device drops offline; | 66 # This catches some errors, including when the device drops offline; |
61 # unfortunately adb is very inconsistent with error reporting so many | 67 # unfortunately adb is very inconsistent with error reporting so many |
62 # command failures present differently. | 68 # command failures present differently. |
63 if check_error and output[:len('error:')] == 'error:': | 69 if check_error and output.startswith('error:'): |
64 raise device_errors.AdbCommandFailedError(arg_list, output) | 70 raise device_errors.AdbCommandFailedError(args, output) |
65 return output | 71 return output |
66 # pylint: enable=unused-argument | 72 # pylint: enable=unused-argument |
67 | 73 |
68 def _DeviceAdbCmd(self, arg_list, timeout, retries, check_error=True): | 74 def _RunDeviceAdbCmd(self, args, timeout, retries, check_error=True): |
69 """Runs an adb command on the device associated with this object. | 75 """Runs an adb command on the device associated with this object. |
70 | 76 |
71 Args: | 77 Args: |
72 arg_list: A list of arguments to adb. | 78 args: A list of arguments to adb. |
73 timeout: Timeout in seconds. | 79 timeout: Timeout in seconds. |
74 retries: Number of retries. | 80 retries: Number of retries. |
75 check_error: Check that the command doesn't return an error message. This | 81 check_error: Check that the command doesn't return an error message. This |
76 does NOT check the return code of shell commands. | 82 does NOT check the exit status of shell commands. |
77 | 83 |
78 Returns: | 84 Returns: |
79 The output of the command. | 85 The output of the command. |
80 """ | 86 """ |
81 return self._RunAdbCmd( | 87 return self._RunAdbCmd(args, timeout=timeout, retries=retries, |
82 ['-s', self._device_serial] + arg_list, timeout=timeout, | 88 device_serial=self._device_serial, |
83 retries=retries, check_error=check_error) | 89 check_error=check_error) |
84 | 90 |
85 def __eq__(self, other): | 91 def __eq__(self, other): |
86 """Consider instances equal if they refer to the same device. | 92 """Consider instances equal if they refer to the same device. |
87 | 93 |
88 Args: | 94 Args: |
89 other: The instance to compare equality with. | 95 other: The instance to compare equality with. |
90 | 96 |
91 Returns: | 97 Returns: |
92 True if the instances are considered equal, false otherwise. | 98 True if the instances are considered equal, false otherwise. |
93 """ | 99 """ |
(...skipping 16 matching lines...) Expand all Loading... |
110 """Get the list of active attached devices. | 116 """Get the list of active attached devices. |
111 | 117 |
112 Args: | 118 Args: |
113 timeout: (optional) Timeout per try in seconds. | 119 timeout: (optional) Timeout per try in seconds. |
114 retries: (optional) Number of retries to attempt. | 120 retries: (optional) Number of retries to attempt. |
115 | 121 |
116 Yields: | 122 Yields: |
117 AdbWrapper instances. | 123 AdbWrapper instances. |
118 """ | 124 """ |
119 output = cls._RunAdbCmd(['devices'], timeout=timeout, retries=retries) | 125 output = cls._RunAdbCmd(['devices'], timeout=timeout, retries=retries) |
120 lines = [line.split() for line in output.split('\n')] | 126 lines = [line.split() for line in output.splitlines()] |
121 return [AdbWrapper(line[0]) for line in lines | 127 return [AdbWrapper(line[0]) for line in lines |
122 if len(line) == 2 and line[1] == 'device'] | 128 if len(line) == 2 and line[1] == 'device'] |
123 | 129 |
124 def GetDeviceSerial(self): | 130 def GetDeviceSerial(self): |
125 """Gets the device serial number associated with this object. | 131 """Gets the device serial number associated with this object. |
126 | 132 |
127 Returns: | 133 Returns: |
128 Device serial number as a string. | 134 Device serial number as a string. |
129 """ | 135 """ |
130 return self._device_serial | 136 return self._device_serial |
131 | 137 |
132 def Push(self, local, remote, timeout=60*5, retries=_DEFAULT_RETRIES): | 138 def Push(self, local, remote, timeout=60*5, retries=_DEFAULT_RETRIES): |
133 """Pushes a file from the host to the device. | 139 """Pushes a file from the host to the device. |
134 | 140 |
135 Args: | 141 Args: |
136 local: Path on the host filesystem. | 142 local: Path on the host filesystem. |
137 remote: Path on the device filesystem. | 143 remote: Path on the device filesystem. |
138 timeout: (optional) Timeout per try in seconds. | 144 timeout: (optional) Timeout per try in seconds. |
139 retries: (optional) Number of retries to attempt. | 145 retries: (optional) Number of retries to attempt. |
140 """ | 146 """ |
141 _VerifyLocalFileExists(local) | 147 _VerifyLocalFileExists(local) |
142 self._DeviceAdbCmd(['push', local, remote], timeout, retries) | 148 self._RunDeviceAdbCmd(['push', local, remote], timeout, retries) |
143 | 149 |
144 def Pull(self, remote, local, timeout=60*5, retries=_DEFAULT_RETRIES): | 150 def Pull(self, remote, local, timeout=60*5, retries=_DEFAULT_RETRIES): |
145 """Pulls a file from the device to the host. | 151 """Pulls a file from the device to the host. |
146 | 152 |
147 Args: | 153 Args: |
148 remote: Path on the device filesystem. | 154 remote: Path on the device filesystem. |
149 local: Path on the host filesystem. | 155 local: Path on the host filesystem. |
150 timeout: (optional) Timeout per try in seconds. | 156 timeout: (optional) Timeout per try in seconds. |
151 retries: (optional) Number of retries to attempt. | 157 retries: (optional) Number of retries to attempt. |
152 """ | 158 """ |
153 self._DeviceAdbCmd(['pull', remote, local], timeout, retries) | 159 self._RunDeviceAdbCmd(['pull', remote, local], timeout, retries) |
154 _VerifyLocalFileExists(local) | 160 _VerifyLocalFileExists(local) |
155 | 161 |
156 def Shell(self, command, expect_rc=0, timeout=_DEFAULT_TIMEOUT, | 162 def Shell(self, command, expect_status=0, timeout=_DEFAULT_TIMEOUT, |
157 retries=_DEFAULT_RETRIES): | 163 retries=_DEFAULT_RETRIES): |
158 """Runs a shell command on the device. | 164 """Runs a shell command on the device. |
159 | 165 |
160 Args: | 166 Args: |
161 command: The shell command to run. | 167 command: A string with the shell command to run. |
162 expect_rc: (optional) Check that the command's return code matches this | 168 expect_status: (optional) Check that the command's exit status matches |
163 value. Default is 0. If set to None the test is skipped. | 169 this value. Default is 0. If set to None the test is skipped. |
164 timeout: (optional) Timeout per try in seconds. | 170 timeout: (optional) Timeout per try in seconds. |
165 retries: (optional) Number of retries to attempt. | 171 retries: (optional) Number of retries to attempt. |
166 | 172 |
167 Returns: | 173 Returns: |
168 The output of the shell command as a string. | 174 The output of the shell command as a string. |
169 | 175 |
170 Raises: | 176 Raises: |
171 device_errors.AdbCommandFailedError: If the return code doesn't match | 177 device_errors.AdbCommandFailedError: If the exit status doesn't match |
172 |expect_rc|. | 178 |expect_status|. |
173 """ | 179 """ |
174 if expect_rc is None: | 180 if expect_status is None: |
175 actual_command = command | 181 args = ['shell', command] |
176 else: | 182 else: |
177 actual_command = '%s; echo %%$?;' % command.rstrip() | 183 args = ['shell', '%s; echo %%$?;' % command.rstrip()] |
178 output = self._DeviceAdbCmd( | 184 output = self._RunDeviceAdbCmd(args, timeout, retries, check_error=False) |
179 ['shell', actual_command], timeout, retries, check_error=False) | 185 if expect_status is not None: |
180 if expect_rc is not None: | |
181 output_end = output.rfind('%') | 186 output_end = output.rfind('%') |
182 if output_end < 0: | 187 if output_end < 0: |
183 # causes the string for rc to become empty and also raise a ValueError | 188 # causes the status string to become empty and raise a ValueError |
184 output_end = len(output) | 189 output_end = len(output) |
185 | 190 |
186 try: | 191 try: |
187 rc = int(output[output_end+1:]) | 192 status = int(output[output_end+1:]) |
188 except ValueError: | 193 except ValueError: |
| 194 logging.warning('exit status of shell command %r missing.', command) |
189 raise device_errors.AdbCommandFailedError( | 195 raise device_errors.AdbCommandFailedError( |
190 ['shell'], 'command %r on device produced output %r where no' | 196 args, output, device_serial=self._device_serial) |
191 ' valid return code was found' % (actual_command, output), | |
192 self._device_serial) | |
193 | |
194 output = output[:output_end] | 197 output = output[:output_end] |
195 if rc != expect_rc: | 198 if status != expect_status: |
196 raise device_errors.AdbShellCommandFailedError( | 199 raise device_errors.AdbCommandFailedError( |
197 command, rc, output, self._device_serial) | 200 args, output, status, self._device_serial) |
198 return output | 201 return output |
199 | 202 |
200 def Logcat(self, filter_spec=None, timeout=_DEFAULT_TIMEOUT, | 203 def Logcat(self, filter_spec=None, timeout=_DEFAULT_TIMEOUT, |
201 retries=_DEFAULT_RETRIES): | 204 retries=_DEFAULT_RETRIES): |
202 """Get the logcat output. | 205 """Get the logcat output. |
203 | 206 |
204 Args: | 207 Args: |
205 filter_spec: (optional) Spec to filter the logcat. | 208 filter_spec: (optional) Spec to filter the logcat. |
206 timeout: (optional) Timeout per try in seconds. | 209 timeout: (optional) Timeout per try in seconds. |
207 retries: (optional) Number of retries to attempt. | 210 retries: (optional) Number of retries to attempt. |
208 | 211 |
209 Returns: | 212 Returns: |
210 logcat output as a string. | 213 logcat output as a string. |
211 """ | 214 """ |
212 cmd = ['logcat'] | 215 cmd = ['logcat'] |
213 if filter_spec is not None: | 216 if filter_spec is not None: |
214 cmd.append(filter_spec) | 217 cmd.append(filter_spec) |
215 return self._DeviceAdbCmd(cmd, timeout, retries, check_error=False) | 218 return self._RunDeviceAdbCmd(cmd, timeout, retries, check_error=False) |
216 | 219 |
217 def Forward(self, local, remote, timeout=_DEFAULT_TIMEOUT, | 220 def Forward(self, local, remote, timeout=_DEFAULT_TIMEOUT, |
218 retries=_DEFAULT_RETRIES): | 221 retries=_DEFAULT_RETRIES): |
219 """Forward socket connections from the local socket to the remote socket. | 222 """Forward socket connections from the local socket to the remote socket. |
220 | 223 |
221 Sockets are specified by one of: | 224 Sockets are specified by one of: |
222 tcp:<port> | 225 tcp:<port> |
223 localabstract:<unix domain socket name> | 226 localabstract:<unix domain socket name> |
224 localreserved:<unix domain socket name> | 227 localreserved:<unix domain socket name> |
225 localfilesystem:<unix domain socket name> | 228 localfilesystem:<unix domain socket name> |
226 dev:<character device name> | 229 dev:<character device name> |
227 jdwp:<process pid> (remote only) | 230 jdwp:<process pid> (remote only) |
228 | 231 |
229 Args: | 232 Args: |
230 local: The host socket. | 233 local: The host socket. |
231 remote: The device socket. | 234 remote: The device socket. |
232 timeout: (optional) Timeout per try in seconds. | 235 timeout: (optional) Timeout per try in seconds. |
233 retries: (optional) Number of retries to attempt. | 236 retries: (optional) Number of retries to attempt. |
234 """ | 237 """ |
235 self._DeviceAdbCmd(['forward', str(local), str(remote)], timeout, retries) | 238 self._RunDeviceAdbCmd(['forward', str(local), str(remote)], timeout, |
| 239 retries) |
236 | 240 |
237 def JDWP(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 241 def JDWP(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
238 """List of PIDs of processes hosting a JDWP transport. | 242 """List of PIDs of processes hosting a JDWP transport. |
239 | 243 |
240 Args: | 244 Args: |
241 timeout: (optional) Timeout per try in seconds. | 245 timeout: (optional) Timeout per try in seconds. |
242 retries: (optional) Number of retries to attempt. | 246 retries: (optional) Number of retries to attempt. |
243 | 247 |
244 Returns: | 248 Returns: |
245 A list of PIDs as strings. | 249 A list of PIDs as strings. |
246 """ | 250 """ |
247 return [a.strip() for a in | 251 return [a.strip() for a in |
248 self._DeviceAdbCmd(['jdwp'], timeout, retries).split('\n')] | 252 self._RunDeviceAdbCmd(['jdwp'], timeout, retries).split('\n')] |
249 | 253 |
250 def Install(self, apk_path, forward_lock=False, reinstall=False, | 254 def Install(self, apk_path, forward_lock=False, reinstall=False, |
251 sd_card=False, timeout=60*2, retries=_DEFAULT_RETRIES): | 255 sd_card=False, timeout=60*2, retries=_DEFAULT_RETRIES): |
252 """Install an apk on the device. | 256 """Install an apk on the device. |
253 | 257 |
254 Args: | 258 Args: |
255 apk_path: Host path to the APK file. | 259 apk_path: Host path to the APK file. |
256 forward_lock: (optional) If set forward-locks the app. | 260 forward_lock: (optional) If set forward-locks the app. |
257 reinstall: (optional) If set reinstalls the app, keeping its data. | 261 reinstall: (optional) If set reinstalls the app, keeping its data. |
258 sd_card: (optional) If set installs on the SD card. | 262 sd_card: (optional) If set installs on the SD card. |
259 timeout: (optional) Timeout per try in seconds. | 263 timeout: (optional) Timeout per try in seconds. |
260 retries: (optional) Number of retries to attempt. | 264 retries: (optional) Number of retries to attempt. |
261 """ | 265 """ |
262 _VerifyLocalFileExists(apk_path) | 266 _VerifyLocalFileExists(apk_path) |
263 cmd = ['install'] | 267 cmd = ['install'] |
264 if forward_lock: | 268 if forward_lock: |
265 cmd.append('-l') | 269 cmd.append('-l') |
266 if reinstall: | 270 if reinstall: |
267 cmd.append('-r') | 271 cmd.append('-r') |
268 if sd_card: | 272 if sd_card: |
269 cmd.append('-s') | 273 cmd.append('-s') |
270 cmd.append(apk_path) | 274 cmd.append(apk_path) |
271 output = self._DeviceAdbCmd(cmd, timeout, retries) | 275 output = self._RunDeviceAdbCmd(cmd, timeout, retries) |
272 if 'Success' not in output: | 276 if 'Success' not in output: |
273 raise device_errors.AdbCommandFailedError(cmd, output) | 277 raise device_errors.AdbCommandFailedError( |
| 278 cmd, output, device_serial=self._device_serial) |
274 | 279 |
275 def Uninstall(self, package, keep_data=False, timeout=_DEFAULT_TIMEOUT, | 280 def Uninstall(self, package, keep_data=False, timeout=_DEFAULT_TIMEOUT, |
276 retries=_DEFAULT_RETRIES): | 281 retries=_DEFAULT_RETRIES): |
277 """Remove the app |package| from the device. | 282 """Remove the app |package| from the device. |
278 | 283 |
279 Args: | 284 Args: |
280 package: The package to uninstall. | 285 package: The package to uninstall. |
281 keep_data: (optional) If set keep the data and cache directories. | 286 keep_data: (optional) If set keep the data and cache directories. |
282 timeout: (optional) Timeout per try in seconds. | 287 timeout: (optional) Timeout per try in seconds. |
283 retries: (optional) Number of retries to attempt. | 288 retries: (optional) Number of retries to attempt. |
284 """ | 289 """ |
285 cmd = ['uninstall'] | 290 cmd = ['uninstall'] |
286 if keep_data: | 291 if keep_data: |
287 cmd.append('-k') | 292 cmd.append('-k') |
288 cmd.append(package) | 293 cmd.append(package) |
289 output = self._DeviceAdbCmd(cmd, timeout, retries) | 294 output = self._RunDeviceAdbCmd(cmd, timeout, retries) |
290 if 'Failure' in output: | 295 if 'Failure' in output: |
291 raise device_errors.AdbCommandFailedError(cmd, output) | 296 raise device_errors.AdbCommandFailedError( |
| 297 cmd, output, device_serial=self._device_serial) |
292 | 298 |
293 def Backup(self, path, packages=None, apk=False, shared=False, | 299 def Backup(self, path, packages=None, apk=False, shared=False, |
294 nosystem=True, include_all=False, timeout=_DEFAULT_TIMEOUT, | 300 nosystem=True, include_all=False, timeout=_DEFAULT_TIMEOUT, |
295 retries=_DEFAULT_RETRIES): | 301 retries=_DEFAULT_RETRIES): |
296 """Write an archive of the device's data to |path|. | 302 """Write an archive of the device's data to |path|. |
297 | 303 |
298 Args: | 304 Args: |
299 path: Local path to store the backup file. | 305 path: Local path to store the backup file. |
300 packages: List of to packages to be backed up. | 306 packages: List of to packages to be backed up. |
301 apk: (optional) If set include the .apk files in the archive. | 307 apk: (optional) If set include the .apk files in the archive. |
(...skipping 10 matching lines...) Expand all Loading... |
312 if shared: | 318 if shared: |
313 cmd.append('-shared') | 319 cmd.append('-shared') |
314 if nosystem: | 320 if nosystem: |
315 cmd.append('-nosystem') | 321 cmd.append('-nosystem') |
316 if include_all: | 322 if include_all: |
317 cmd.append('-all') | 323 cmd.append('-all') |
318 if packages: | 324 if packages: |
319 cmd.extend(packages) | 325 cmd.extend(packages) |
320 assert bool(packages) ^ bool(include_all), ( | 326 assert bool(packages) ^ bool(include_all), ( |
321 'Provide \'packages\' or set \'include_all\' but not both.') | 327 'Provide \'packages\' or set \'include_all\' but not both.') |
322 ret = self._DeviceAdbCmd(cmd, timeout, retries) | 328 ret = self._RunDeviceAdbCmd(cmd, timeout, retries) |
323 _VerifyLocalFileExists(path) | 329 _VerifyLocalFileExists(path) |
324 return ret | 330 return ret |
325 | 331 |
326 def Restore(self, path, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 332 def Restore(self, path, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
327 """Restore device contents from the backup archive. | 333 """Restore device contents from the backup archive. |
328 | 334 |
329 Args: | 335 Args: |
330 path: Host path to the backup archive. | 336 path: Host path to the backup archive. |
331 timeout: (optional) Timeout per try in seconds. | 337 timeout: (optional) Timeout per try in seconds. |
332 retries: (optional) Number of retries to attempt. | 338 retries: (optional) Number of retries to attempt. |
333 """ | 339 """ |
334 _VerifyLocalFileExists(path) | 340 _VerifyLocalFileExists(path) |
335 self._DeviceAdbCmd(['restore'] + [path], timeout, retries) | 341 self._RunDeviceAdbCmd(['restore'] + [path], timeout, retries) |
336 | 342 |
337 def WaitForDevice(self, timeout=60*5, retries=_DEFAULT_RETRIES): | 343 def WaitForDevice(self, timeout=60*5, retries=_DEFAULT_RETRIES): |
338 """Block until the device is online. | 344 """Block until the device is online. |
339 | 345 |
340 Args: | 346 Args: |
341 timeout: (optional) Timeout per try in seconds. | 347 timeout: (optional) Timeout per try in seconds. |
342 retries: (optional) Number of retries to attempt. | 348 retries: (optional) Number of retries to attempt. |
343 """ | 349 """ |
344 self._DeviceAdbCmd(['wait-for-device'], timeout, retries) | 350 self._RunDeviceAdbCmd(['wait-for-device'], timeout, retries) |
345 | 351 |
346 def GetState(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 352 def GetState(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
347 """Get device state. | 353 """Get device state. |
348 | 354 |
349 Args: | 355 Args: |
350 timeout: (optional) Timeout per try in seconds. | 356 timeout: (optional) Timeout per try in seconds. |
351 retries: (optional) Number of retries to attempt. | 357 retries: (optional) Number of retries to attempt. |
352 | 358 |
353 Returns: | 359 Returns: |
354 One of 'offline', 'bootloader', or 'device'. | 360 One of 'offline', 'bootloader', or 'device'. |
355 """ | 361 """ |
356 return self._DeviceAdbCmd(['get-state'], timeout, retries).strip() | 362 return self._RunDeviceAdbCmd(['get-state'], timeout, retries).strip() |
357 | 363 |
358 def GetDevPath(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 364 def GetDevPath(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
359 """Gets the device path. | 365 """Gets the device path. |
360 | 366 |
361 Args: | 367 Args: |
362 timeout: (optional) Timeout per try in seconds. | 368 timeout: (optional) Timeout per try in seconds. |
363 retries: (optional) Number of retries to attempt. | 369 retries: (optional) Number of retries to attempt. |
364 | 370 |
365 Returns: | 371 Returns: |
366 The device path (e.g. usb:3-4) | 372 The device path (e.g. usb:3-4) |
367 """ | 373 """ |
368 return self._DeviceAdbCmd(['get-devpath'], timeout, retries) | 374 return self._RunDeviceAdbCmd(['get-devpath'], timeout, retries) |
369 | 375 |
370 def Remount(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 376 def Remount(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
371 """Remounts the /system partition on the device read-write.""" | 377 """Remounts the /system partition on the device read-write.""" |
372 self._DeviceAdbCmd(['remount'], timeout, retries) | 378 self._RunDeviceAdbCmd(['remount'], timeout, retries) |
373 | 379 |
374 def Reboot(self, to_bootloader=False, timeout=60*5, | 380 def Reboot(self, to_bootloader=False, timeout=60*5, |
375 retries=_DEFAULT_RETRIES): | 381 retries=_DEFAULT_RETRIES): |
376 """Reboots the device. | 382 """Reboots the device. |
377 | 383 |
378 Args: | 384 Args: |
379 to_bootloader: (optional) If set reboots to the bootloader. | 385 to_bootloader: (optional) If set reboots to the bootloader. |
380 timeout: (optional) Timeout per try in seconds. | 386 timeout: (optional) Timeout per try in seconds. |
381 retries: (optional) Number of retries to attempt. | 387 retries: (optional) Number of retries to attempt. |
382 """ | 388 """ |
383 if to_bootloader: | 389 if to_bootloader: |
384 cmd = ['reboot-bootloader'] | 390 cmd = ['reboot-bootloader'] |
385 else: | 391 else: |
386 cmd = ['reboot'] | 392 cmd = ['reboot'] |
387 self._DeviceAdbCmd(cmd, timeout, retries) | 393 self._RunDeviceAdbCmd(cmd, timeout, retries) |
388 | 394 |
389 def Root(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): | 395 def Root(self, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES): |
390 """Restarts the adbd daemon with root permissions, if possible. | 396 """Restarts the adbd daemon with root permissions, if possible. |
391 | 397 |
392 Args: | 398 Args: |
393 timeout: (optional) Timeout per try in seconds. | 399 timeout: (optional) Timeout per try in seconds. |
394 retries: (optional) Number of retries to attempt. | 400 retries: (optional) Number of retries to attempt. |
395 """ | 401 """ |
396 output = self._DeviceAdbCmd(['root'], timeout, retries) | 402 output = self._RunDeviceAdbCmd(['root'], timeout, retries) |
397 if 'cannot' in output: | 403 if 'cannot' in output: |
398 raise device_errors.AdbCommandFailedError(['root'], output) | 404 raise device_errors.AdbCommandFailedError( |
399 | 405 ['root'], output, device_serial=self._device_serial) |
OLD | NEW |