示例#1
0
 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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
 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))
示例#6
0
    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)
示例#7
0
 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))
示例#8
0
 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))
示例#9
0
 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))
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
 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)
示例#14
0
 def reset(self):
     self._is_ready = False
     self._just_rebooted = True
     adb_command(self.adb_name, 'reboot', timeout=self.default_timeout)
示例#15
0
 def uninstall(self, package):
     self._check_ready()
     adb_command(self.adb_name, "uninstall {}".format(package), timeout=self.default_timeout)
示例#16
0
 def reset(self):
     self._is_ready = False
     self._just_rebooted = True
     adb_command(self.adb_name, 'reboot', timeout=self.default_timeout)
示例#17
0
 def uninstall(self, package):
     self._check_ready()
     adb_command(self.adb_name,
                 "uninstall {}".format(package),
                 timeout=self.default_timeout)