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

Android Studio中Android 10(Q)模拟器熄屏时screencap截图异常问题

问题根因

该现象是Android 10(API 29)官方模拟器镜像的专属已知渲染逻辑bug,和操作流程无关:

  • 灰白相间的小方格是Android图形栈默认的内存占位图案,用于标记未完成渲染、未写入有效内容的图形缓冲区
  • Android 10模拟器熄屏时,SurfaceFlinger合成服务跳过了“向帧缓冲填充纯黑帧再提交”的步骤,直接把未写入有效内容的图形缓冲区暴露给了screencap调用接口,最终导出的截图就会显示棋盘格占位图案
  • Android 9及更早版本模拟器保留了熄屏填黑帧的逻辑,Android 11版本修复了该合成逻辑疏漏,因此同操作下这两个版本的模拟器熄屏截图为正常纯黑。
复现操作流程
  • 在Android Studio中启动Android 10版本模拟器
  • 触发模拟器熄屏操作,等待屏幕完全熄灭
  • 在Android Studio终端执行adb devices确认ADB连接正常
  • 执行截图命令:adb shell screencap -p /sdcard/cap_test.png
  • 将截图导出到本地:adb pull /sdcard/cap_test.png ./
  • 打开本地文件即可看到异常棋盘格截图,同操作在Android 9、Android 11模拟器上得到正常纯黑屏截图。
异常与正常效果参考

Android 10模拟器熄屏screencap异常截图
Android 9模拟器熄屏screencap正常截图

可用解决方案
  • 临时逻辑规避:执行screencap前先通过命令adb shell dumpsys power | grep mWakefulness=检测屏幕状态,若返回mWakefulness=Asleep即熄屏状态,可直接返回自定义纯黑图片作为截图结果,或先点亮屏幕再执行截图操作;若做自动化测试,可单独对API 29版本加熄屏场景的特殊判断逻辑。
  • 镜像版本修复:将本地Android 10模拟器镜像更新到Google官方发布的API 29最新修订版,部分后续修订的镜像已经合入了该bug的修复补丁;若无严格的API 29版本强需求,直接迁移测试场景到Android 11(API 30)及以上版本模拟器即可完全规避该问题。
  • 替换截图路径:放弃使用adb shell screencap的截图方式,改用adb exec-out screencap -p > cap_test.png直接从宿主机端取帧,或使用Android Studio模拟器侧边栏自带的截图按钮,这两种方式不经过SurfaceFlinger熄屏状态的合成层输出,不会出现棋盘格异常。

内容的提问来源于stack exchange,提问作者It's Me SMA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:06:30