You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用adb与memuc截取模拟器指定坐标截图后文件损坏求助

问题原因及解决方案

核心问题分析

  1. 坐标参数无效:你使用的截图区域坐标161,631,554,334不符合screencap的区域规则——-d参数要求格式为left,top,right,bottom,其中底部坐标必须大于顶部坐标,但你给出的top=631、bottom=334是反向的,导致截图区域不存在,生成的文件为空或损坏。
  2. 命令解析错误:代码中使用HTML转义符",会导致shell解析adb命令时出现参数混乱,无法正确执行截图指令。
  3. 格式冲突:-p选项强制输出PNG格式,却将文件后缀设为.jpg,格式不匹配会导致系统无法正确识别文件结构。
  4. 调试逻辑问题:你在pull成功后立即删除本地文件,这会导致无法验证拉取的截图是否正常(虽不是文件损坏的直接原因,但影响问题排查)。

修复后的代码示例

import subprocess

# 修正坐标顺序:left, top, right, bottom(确保bottom > top)
screenshot_cmd = [
    'memuc', '-i', '1', 'adb', 'shell',
    'screencap', '-d', '161,334,554,631', '/sdcard/screenshot.png'
]
process = subprocess.Popen(screenshot_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()

if process.returncode == 0:
    # 拉取截图到本地
    pull_cmd = ['memuc', '-i', '1', 'adb', 'pull', '/sdcard/screenshot.png']
    pull_process = subprocess.Popen(pull_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    pull_out, pull_err = pull_process.communicate()
    
    if pull_process.returncode == 0:
        print("截图拉取成功,可直接查看本地screenshot.png")
    else:
        print(f"拉取失败: {pull_err.decode('utf-8')}")
else:
    print(f"截图失败: {stderr.decode('utf-8')}")

额外注意事项

  • 若需要JPG格式截图,可去掉-p选项(部分Android版本支持-j参数强制输出JPG),或先保存为PNG后用图片工具转换。
  • 避免使用shell=True,将命令拆分为列表形式能彻底避免参数解析错误。
  • 调试阶段不要急于删除本地文件,确认文件可正常打开后再做清理操作。

内容的提问来源于stack exchange,提问作者Deag96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:30:55