如何使用Python结合Appium关闭Android设备上的所有打开应用?
解决方案:获取运行中应用并批量关闭
1. 获取当前运行的应用列表
根据你使用的平台(Android/iOS),可以用以下方式拿到运行中的应用包名列表:
Android 平台
方法一:通过 Appium API 直接获取
利用 Appium 的 execute_script 调用 Android 系统接口,返回所有运行中的进程信息,再提取包名:
# 获取所有运行中进程的详细信息 running_processes = driver.execute_script('mobile: getRunningAppProcesses') # 提取包名,可按需过滤系统进程(比如排除以com.android开头的核心进程) running_packages = [proc['processName'] for proc in running_processes if not proc['processName'].startswith('com.android')]
方法二:通过 adb 命令获取
如果你的脚本环境能直接调用 adb,可以执行命令拿到包名列表:
# 输出所有非系统第三方运行应用的包名 adb shell dumpsys activity processes | grep -E "ProcessRecord" | awk '{print $8}' | grep -v "com.android"
在 Python 脚本中可以通过 subprocess 模块执行该命令并读取输出。
iOS 平台
使用 Appium 的 mobile: listApps 方法,指定筛选状态为 running:
# 获取所有运行中的应用信息 running_apps = driver.execute_script('mobile: listApps', {'state': 'running'}) # 提取应用的 bundleId running_bundle_ids = [app['bundleId'] for app in running_apps]
2. 批量关闭应用
拿到包名/ bundleId 列表后,循环调用 terminate_app 即可。建议跳过你的自动化目标应用,避免误关:
# 替换成你的自动化目标应用包名/bundleId target_app = "com.your.target.app" for app_id in running_packages: # iOS 替换为 running_bundle_ids if app_id != target_app: try: driver.terminate_app(app_id) print(f"已关闭应用: {app_id}") except Exception as e: print(f"关闭应用{app_id}失败: {str(e)}")
额外优化:快速清后台(Android 专属)
如果不需要精确控制关闭哪些应用,Android 可以直接模拟系统清后台操作,效率更高:
# 先按Home键回到桌面 driver.press_keycode(3) # 模拟按下系统清后台按键(不同品牌机型按键码可能不同,示例为小米机型的187,需自行适配) driver.press_keycode(187)
或者用 adb 命令强制停止所有第三方应用:
adb shell pm list packages -3 | cut -d':' -f2 | xargs -I {} adb shell am force-stop {}
内容的提问来源于stack exchange,提问作者Gauthier Buttez
相关产品推荐
相关产品推荐

