def get_target(self): self.wait_ready() target = str(adb.shell('cat', '/pip/CLOVER_TARGET')) url = str(adb.shell('cat', '/pip/CLOVER_CLOUD_URL')) if re.match('http://.*', url): url = url[7:] return (target, url)
def get_cpuid(codename): if codename in ["KNOTTY_PINE","GOLDEN_OAK","BAYLEAF"]: return sorted(list(sed(adb.shell('getprop'), '-n', r's/^.*clover_cpuid.*\[\([0-9a-fA-F]\{16\}\).*$/\1/p')))[-1].strip() else: return sorted(list(sed(adb.shell('getprop'), '-n', r's/^.*cpuid.*\[\([0-9a-fA-F]\{32\}\).*$/\1/p')))[-1].strip()
def has_text(text): try: egrep(adb.shell(['uiautomator dump /dev/tty']), ".*" + text + ".*") return True except ErrorReturnCode: pass return False
def ready(): try: if str(adb.shell(['getprop', 'sys.boot_completed'])).strip() == '1': return True return False except sh.ErrorReturnCode: return False
def get_target(self): self.wait_ready() target_url = str(sed(adb.shell('mmc_access', 'r_yj2_target'), '-n', r's/^.*YJ2[^:]*: \([^:]*\):\(.*\).*$/\1,\2/p')).strip() assert(len(target_url) > 0) (target, url) = target_url.split(',') return (target, url)
def screenshot(device, printer=StatusPrinter()): printer("Dumping screenshot for Device: {}".format(device.serial)) with Indent(printer): # make way for new file outfile_name = "{}_{}.png".format(device.serial, datetime.now().strftime("%Y-%m-%d_%H%M%S")) outfile_path = os.path.join(os.getcwd(), outfile_name) rm('-f', outfile_path) # get the screencap tempfile_path = '/sdcard/{}'.format(outfile_name) adb.shell('screencap', '-p', tempfile_path) adb.pull(tempfile_path) adb.shell('rm', tempfile_path) printer("Wrote " + outfile_path)
def get_position(self): def dump(line, stdin, process): try: line = line.split(' ') if line[0] == '/dev/input/event1:': if line[2] == '0035': self.x = int(line[3], 16) elif line[2] == '0036': self.y = int(line[3], 16) except Exception: pass if self.x and self.y: print(self.x, self.y) process.kill() return True print('Please tap your phone screen.') adb.shell('getevent', _bg=True, _out=dump, _bg_exc=False)
def set_target(self, target, url): self.wait_ready() if re.match('http://.*', url): url = url[7:] print("targeting device to: " + url) cmd = [ 'su', '1000', 'content', 'call', '--uri', 'content://com.clover.service.provider', '--method', 'changeTarget', '--extra', 'target:s:{}:{}'.format(target, url) ] # print(' '.join(cmd)) adb.shell(cmd) # the above call causes a reset # wait until the adb connection is lost sleep(self.get_shutdown_delay())
def set_target(self, target, url, printer=StatusPrinter()): self.wait_ready() if re.match('http://.*', url): url = url[7:] printer("Targeting device to: " + url) with Indent(printer): cmd = ['su', '1000', 'content', 'call', '--uri', 'content://com.clover.service.provider', '--method', 'changeTarget', '--extra', 'target:s:{}:{}'.format(target, url)] printer('\'' + ' '.join(cmd) + '\'') adb.shell(cmd) # the above call causes a reset # wait until the adb connection is lost printer("Waiting {} seconds for device to begin reboot..." .format(self.get_shutdown_delay())) sleep(self.get_shutdown_delay())
def get_connected_device(): wait_ready() # tested for flex and mini serial = str( sed( adb.shell('getprop'), '-n', r's/^.*serial.*\[\(C[A-Za-z0-9]\{3\}[UE][CQNOPRD][0-9]\{8\}\).*$/\1/p' )).split('\n')[0] assert (len(serial) > 0) # tested for flex and mini cpuid = str( sed(adb.shell('getprop'), '-n', r's/^.*cpuid.*\[\([0-9a-fA-F]\{32\}\).*$/\1/p')).split('\n')[0] assert (len(cpuid) > 0) codename = prefix2codename[serial[2:4]] device = codename2class[codename]() device.serial = serial device.cpuid = cpuid device.codename = codename return device
def get_connected_device(printer=StatusPrinter()): wait_ready(printer) # tested for flex, mini, and station_2018 serial = str(sed(adb.shell('getprop'), '-n', r's/^.*serial.*\[\(C[A-Za-z0-9]\{3\}[UEL][CQNOPRD][0-9]\{8\}\).*$/\1/p')).split('\n')[0] assert(len(serial) > 0) codename = prefix2codename[serial[2:4]] device = codename2class[codename]() cpuid = get_cpuid(codename) assert(len(cpuid) > 0) device.serial = serial device.cpuid = cpuid device.codename = codename printer("Found attached device: " + str(device)) return device
def click(self): while CLICK_FLAG: adb.shell('input tap {} {}'.format(self.x, self.y)) sleep(self.interval)
def click(x, y, interval=0.15): while CLICK_FLAG: adb.shell('input tap {} {}'.format(x, y)) sleep(interval)