def _poll(self): with self.lock: self.last_poll = time.time() adb_command(self.adb_device, 'logcat -d >> {}'.format(self.buffer_file), timeout=self.timeout) adb_command(self.adb_device, 'logcat -c', timeout=self.timeout)
def forward_port(self, from_port, to_port): """ Forward a port on the device to a port on localhost. :param from_port: Port on the device which to forward. :param to_port: Port on the localhost to which the device port will be forwarded. Ports should be specified using adb spec. See the "adb forward" section in "adb help". """ adb_command(self.adb_name, 'forward {} {}'.format(from_port, to_port), timeout=self.default_timeout)
def pull_file(self, source, dest, as_root=False, timeout=default_timeout): # pylint: disable=W0221 """ Modified in version 2.1.4: added ``as_root`` parameter. """ self._check_ready() if not as_root: adb_command(self.adb_name, "pull '{}' '{}'".format(source, dest), timeout=timeout) else: device_tempfile = self.path.join(self.file_transfer_cache, source.lstrip(self.path.sep)) self.execute('mkdir -p {}'.format(self.path.dirname(device_tempfile))) self.execute('cp {} {}'.format(source, device_tempfile), as_root=True) adb_command(self.adb_name, "pull '{}' '{}'".format(device_tempfile, dest), timeout=timeout)
def forward_port(self, from_port, to_port): """ Forward a port on the device to a port on localhost. :param from_port: Port on the device which to forward. :param to_port: Port on the localhost to which the device port will be forwarded. Ports should be specified using adb spec. See the "adb forward" section in "adb help". """ adb_command(self.adb_name, 'forward {} {}'.format(from_port, to_port), timeout=self.default_timeout)
def install_apk(self, filepath, timeout=default_timeout, replace=False, allow_downgrade=False): # pylint: disable=W0221 self._check_ready() ext = os.path.splitext(filepath)[1].lower() if ext == '.apk': flags = [] if replace: flags.append('-r') # Replace existing APK if allow_downgrade: flags.append( '-d' ) # Install the APK even if a newer version is already installed if self.get_sdk_version() >= 23: flags.append('-g') # Grant all runtime permissions self.logger.debug("Replace APK = {}, ADB flags = '{}'".format( replace, ' '.join(flags))) return adb_command(self.adb_name, "install {} '{}'".format( ' '.join(flags), filepath), timeout=timeout) else: raise DeviceError( 'Can\'t install {}: unsupported format.'.format(filepath))
def push_file(self, source, dest, as_root=False, timeout=default_timeout): # pylint: disable=W0221 """ Modified in version 2.1.4: added ``as_root`` parameter. """ self._check_ready() try: if not as_root: adb_command(self.adb_name, "push '{}' '{}'".format(source, dest), timeout=timeout) else: device_tempfile = self.path.join(self.file_transfer_cache, source.lstrip(self.path.sep)) self.execute("mkdir -p {}".format(self.path.dirname(device_tempfile))) adb_command(self.adb_name, "push '{}' '{}'".format(source, device_tempfile), timeout=timeout) self.execute("cp {} {}".format(device_tempfile, dest), as_root=True) except CalledProcessError as e: raise DeviceError(e)
def install_apk(self, filepath, timeout=default_timeout): # pylint: disable=W0221 self._check_ready() ext = os.path.splitext(filepath)[1].lower() if ext == '.apk': return adb_command(self.adb_name, "install {}".format(filepath), timeout=timeout) else: raise DeviceError('Can\'t install {}: unsupported format.'.format(filepath))
def install_apk(self, filepath, timeout=default_timeout): # pylint: disable=W0221 self._check_ready() ext = os.path.splitext(filepath)[1].lower() if ext == '.apk': return adb_command(self.adb_name, "install {}".format(filepath), timeout=timeout) else: raise DeviceError( 'Can\'t install {}: unsupported format.'.format(filepath))
def install_apk(self, filepath, timeout=default_timeout, replace=False): # pylint: disable=W0221 self._check_ready() ext = os.path.splitext(filepath)[1].lower() if ext == '.apk': flags = [] if replace: flags.append('-r') # Replace existing APK if self.get_sdk_version() >= 23: flags.append('-g') # Grant all runtime permissions self.logger.debug("Replace APK = {}, ADB flags = '{}'".format(replace, ' '.join(flags))) return adb_command(self.adb_name, "install {} '{}'".format(' '.join(flags), filepath), timeout=timeout) else: raise DeviceError('Can\'t install {}: unsupported format.'.format(filepath))
def pull_file(self, source, dest, as_root=False, timeout=default_timeout): # pylint: disable=W0221 """ Modified in version 2.1.4: added ``as_root`` parameter. """ self._check_ready() try: if not as_root: adb_command(self.adb_name, "pull '{}' '{}'".format(source, dest), timeout=timeout) else: device_tempfile = self.path.join(self.file_transfer_cache, source.lstrip(self.path.sep)) self.execute('mkdir -p {}'.format( self.path.dirname(device_tempfile))) self.execute('cp {} {}'.format(source, device_tempfile), as_root=True) adb_command(self.adb_name, "pull '{}' '{}'".format(device_tempfile, dest), timeout=timeout) except CalledProcessError as e: raise DeviceError(e)
def dump_logcat(self, outfile, filter_spec=None): """ Dump the contents of logcat, for the specified filter spec to the specified output file. See http://developer.android.com/tools/help/logcat.html :param outfile: Output file on the host into which the contents of the log will be written. :param filter_spec: Logcat filter specification. see http://developer.android.com/tools/debugging/debugging-log.html#filteringOutput """ if self._logcat_poller: return self._logcat_poller.write_log(outfile) else: if filter_spec: command = 'logcat -d -s {} > {}'.format(filter_spec, outfile) else: command = 'logcat -d > {}'.format(outfile) return adb_command(self.adb_name, command, timeout=self.default_timeout)
def dump_logcat(self, outfile, filter_spec=None): """ Dump the contents of logcat, for the specified filter spec to the specified output file. See http://developer.android.com/tools/help/logcat.html :param outfile: Output file on the host into which the contents of the log will be written. :param filter_spec: Logcat filter specification. see http://developer.android.com/tools/debugging/debugging-log.html#filteringOutput """ if self._logcat_poller: return self._logcat_poller.write_log(outfile) else: if filter_spec: command = 'logcat -d -s {} > {}'.format(filter_spec, outfile) else: command = 'logcat -d > {}'.format(outfile) return adb_command(self.adb_name, command, timeout=self.default_timeout)
def _poll(self): with self.lock: self.last_poll = time.time() adb_command(self.adb_device, 'logcat -d >> {}'.format(self.buffer_file), timeout=self.timeout) adb_command(self.adb_device, 'logcat -c', timeout=self.timeout)
def reset(self): self._is_ready = False self._just_rebooted = True adb_command(self.adb_name, 'reboot', timeout=self.default_timeout)
def uninstall(self, package): self._check_ready() adb_command(self.adb_name, "uninstall {}".format(package), timeout=self.default_timeout)
def reset(self): self._is_ready = False self._just_rebooted = True adb_command(self.adb_name, 'reboot', timeout=self.default_timeout)
def uninstall(self, package): self._check_ready() adb_command(self.adb_name, "uninstall {}".format(package), timeout=self.default_timeout)