diff --git a/qt4a/androiddriver/adb.py b/qt4a/androiddriver/adb.py index 262c115..14470b0 100644 --- a/qt4a/androiddriver/adb.py +++ b/qt4a/androiddriver/adb.py @@ -450,8 +450,7 @@ def wait_for_boot_complete(self, _timeout=180): wait_period = 5 while not boot_complete and (attempts * wait_period) < _timeout: output = self.run_shell_cmd("getprop sys.boot_completed", retry_count=1) - output = output.strip() - if output == "1": + if output and output.strip() == "1": boot_complete = True else: time.sleep(wait_period) diff --git a/qt4a/androiddriver/devicedriver.py b/qt4a/androiddriver/devicedriver.py index 680c452..7c363ea 100644 --- a/qt4a/androiddriver/devicedriver.py +++ b/qt4a/androiddriver/devicedriver.py @@ -20,6 +20,8 @@ import re import os import time +import traceback + import six from qt4a.androiddriver.adb import ADB from qt4a.androiddriver.clientsocket import DirectAndroidSpyClient @@ -127,8 +129,10 @@ def is_package_installed(self, pkg_name, pkg_size, pkg_md5): :param pkg_md5: 安装包md5 :type pkg_md5: string """ + timeout = 60 ret = self.run_driver_cmd( - "isPackageInstalled", pkg_name, pkg_size, pkg_md5, root=self.adb.is_rooted() + "isPackageInstalled", pkg_name, pkg_size, pkg_md5, root=self.adb.is_rooted(), + timeout=timeout ) return "true" in ret @@ -295,12 +299,32 @@ def get_screen_size(self): width, height = result.split(",") return int(width), int(height) + def _take_screen_shot(self, path, _format='png', quality=90): + """ + 使用android系统命令截图 + # todo:使用android的java接口替换该方案 + """ + # result = self.adb.run_shell_cmd( + # "sh %s/SpyHelper.sh takeScreenshot %s %s %s" % (qt4a_path, path, _format, quality), self.adb.is_rooted()) + # if 'true' in result: + # return True + # logger.warn("Take screenshot by SpyHelper.sh failed: %s" % result) + try: + result = self.adb.run_shell_cmd("screencap -p", binary_output=True) + return result + except Exception as e: + logger.warn("Take screenshot failed: %s" % traceback.format_exc(e)) + return False + def take_screen_shot(self, path, quality=90): """截屏 """ - result = self.adb.run_shell_cmd( - "%s/screenshot capture -q %s" % (qt4a_path, quality), binary_output=True - ) + if self.adb.get_sdk_version() >= 29: + result = self._take_screen_shot(path) + else: + result = self.adb.run_shell_cmd( + "%s/screenshot capture -q %s" % (qt4a_path, quality), binary_output=True + ) # 为避免pull文件耗时,直接写到stdout if len(result) < 256: logger.warn("Take screenshot failed: %s" % result) diff --git a/qt4a/androiddriver/tools/arm64-v8a/droid_inject b/qt4a/androiddriver/tools/arm64-v8a/droid_inject index 667b374..12755cd 100644 Binary files a/qt4a/androiddriver/tools/arm64-v8a/droid_inject and b/qt4a/androiddriver/tools/arm64-v8a/droid_inject differ diff --git a/qt4a/androiddriver/tools/arm64-v8a/droid_inject64 b/qt4a/androiddriver/tools/arm64-v8a/droid_inject64 index fcd496f..e03f19f 100644 Binary files a/qt4a/androiddriver/tools/arm64-v8a/droid_inject64 and b/qt4a/androiddriver/tools/arm64-v8a/droid_inject64 differ diff --git a/qt4a/androiddriver/tools/armeabi-v7a/droid_inject b/qt4a/androiddriver/tools/armeabi-v7a/droid_inject index 667b374..a2a7ee0 100644 Binary files a/qt4a/androiddriver/tools/armeabi-v7a/droid_inject and b/qt4a/androiddriver/tools/armeabi-v7a/droid_inject differ diff --git a/qt4a/androiddriver/tools/armeabi/droid_inject b/qt4a/androiddriver/tools/armeabi/droid_inject index eeec863..12755cd 100644 Binary files a/qt4a/androiddriver/tools/armeabi/droid_inject and b/qt4a/androiddriver/tools/armeabi/droid_inject differ diff --git a/qt4a/androiddriver/tools/version.txt b/qt4a/androiddriver/tools/version.txt index 725cdcd..4be28fd 100644 --- a/qt4a/androiddriver/tools/version.txt +++ b/qt4a/androiddriver/tools/version.txt @@ -1 +1 @@ -193 \ No newline at end of file +194 \ No newline at end of file diff --git a/qt4a/androiddriver/tools/x86/droid_inject b/qt4a/androiddriver/tools/x86/droid_inject index a6a1d0e..12576ec 100644 Binary files a/qt4a/androiddriver/tools/x86/droid_inject and b/qt4a/androiddriver/tools/x86/droid_inject differ diff --git a/qt4a/device.py b/qt4a/device.py index 8546778..d019da5 100644 --- a/qt4a/device.py +++ b/qt4a/device.py @@ -747,6 +747,7 @@ def read_logcat(self, tag, process_name_pattern, pattern, num=1): pat = re.compile(r'^\[(.+)\(\d+\)\]\s+\[.+\]\s+\w/(.+)\(\s*\d+\):\s+(.+)$') log_pat = re.compile(pattern) log_list = self.adb.get_log(False) + log_list = [i.decode("utf-8") for i in log_list] result_list = [] k = 0 for i in range(len(log_list) - 1, -1, -1):