yst原文:https://www.jianshu.com/p/c2e2b8f8ea0d
返回知识列表:Android知识列表
1 命令介绍 screencap -husage: screencap [-hp] [-d display-id] [FILENAME] -h: this message -p: save the file as a png. -d: specify the display id to capture, default 0.If FILENAME ends with .png it will be saved as a png.If FILENAME is not given, the results will be printed to stdout.解释:
用法: screencap [-hp] [-d 显示id] [文件名]
-h: 查看帮助信息
-p: 保存文件为png格式
-d: 指定截取的显示id,默认为fb0(fb为framebuffer)
如果文件名以.png结束,将保存为png格式文件
如果没有文件名,将直接打印到标准输出
1、截取fb0界面到sdcard(此路径可以随意设置),文件名为fb0.png
# screencap sdcard/fb0.png
2、截图保存为png格式,与第一相同(疑惑:在RK3288 Android 5.1系统上,screencap -p /sdcard/fb0.jpg 执行也是成功的,可以查看到截图,不懂???)
# screencap -p /sdcard/fb0.png
3、截取fb1界面到sdcard,文件名为fb1.png
# screencap -d /dev/graphics/fb1 sdcard/fb1.png
4、直接执行screencap,打印到显示屏上,常人看不懂。
# screencap
3 使用场景
因为经常遇到黑屏问题,调查手段就是通过截屏的方式。以判断是否是硬件问题黑屏了。
可以判定从SOC出来的图像是OK的。因为从SOC出来后,还有屏幕硬件和驱动等的修改。
SoC:System on Chip的缩写,称为芯片级系统,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。
4 异常情况 1,截图文件size为 0
暂时怀疑是权限问题吧,需要su 。logcat 获取详细信息,假如有如下信息
perrmission failure: android.permission.READ_FRAME_BUFFER from uid=10113 pid=2934
113 PermissionCache D checking android.permission.READ_FRAME_BUFFER for uid=10113 => denied (294 us)
113 SurfaceFlinger E Permission Denial: can’t read framebuffer pid=2934, uid=10113
则表示权限问题。即使您添加 READ_FRAME_BUFFER 权限,它仍然无法正常工作.通常,这意味着应用程序没有读取帧缓冲区的权限,必须使用系统证书进行编译或使用su获取root权限.
关于Android权限,这里涉及知识 setSecure(true) ,允许截屏。因为有些视频是禁止截屏的,知识产权保护!logcat 中可以搜索 SurfaceFlingerSurfaceFlinger:FB is protected: PERMISSION_DENIEDSurfaceFlinger:captureScreen failed to readInt32:-1