yst原文:http://www.jianshu.com/p/c2e2b8f8ea0d
返回知識列表:androids知識列表
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 androids 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: androids.permission.READ_FRAME_BUFFER from uid=10113 pid=2934
113 PermissionCache D checking androids.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權限.
關於androids權限,這裏涉及知識 setSecure(true) ,允許截屏。因為有些視頻是禁止截屏的,知識產權保護!logcat 中可以搜索 SurfaceFlingerSurfaceFlinger:FB is protected: PERMISSION_DENIEDSurfaceFlinger:captureScreen failed to readInt32:-1