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,默認(rèn)為fb0(fb為framebuffer)
如果文件名以.png結(jié)束,將保存為png格式文件
如果沒有文件名,將直接打印到標(biāo)準(zhǔn)輸出
1、截取fb0界面到sdcard(此路徑可以隨意設(shè)置),文件名為fb0.png
# screencap sdcard/fb0.png
2、截圖保存為png格式,與第一相同(疑惑:在RK3288 Android 5.1系統(tǒng)上,screencap -p /sdcard/fb0.jpg 執(zhí)行也是成功的,可以查看到截圖,不懂???)
# screencap -p /sdcard/fb0.png
3、截取fb1界面到sdcard,文件名為fb1.png
# screencap -d /dev/graphics/fb1 sdcard/fb1.png
4、直接執(zhí)行screencap,打印到顯示屏上,常人看不懂。
# screencap
?
3 使用場景因為經(jīng)常遇到黑屏問題,調(diào)查手段就是通過截屏的方式。以判斷是否是硬件問題黑屏了。
可以判定從SOC出來的圖像是OK的。因為從SOC出來后,還有屏幕硬件和驅(qū)動等的修改。
SoC:System on Chip的縮寫,稱為芯片級系統(tǒng),也有稱片上系統(tǒng),意指它是一個產(chǎn)品,是一個有專用目標(biāo)的集成電路,其中包含完整系統(tǒng)并有嵌入軟件的全部內(nèi)容。
?
4 異常情況 1,截圖文件size為 0?暫時懷疑是權(quán)限問題吧,需要su 。logcat 獲取詳細(xì)信息,假如有如下信息
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
則表示權(quán)限問題。即使您添加?READ_FRAME_BUFFER?權(quán)限,它仍然無法正常工作.通常,這意味著應(yīng)用程序沒有讀取幀緩沖區(qū)的權(quán)限,必須使用系統(tǒng)證書進(jìn)行編譯或使用su獲取root權(quán)限.
關(guān)于Android權(quán)限,這里涉及知識 setSecure(true) ,允許截屏。因為有些視頻是禁止截屏的,知識產(chǎn)權(quán)保護(hù)!logcat 中可以搜索 SurfaceFlingerSurfaceFlinger:FB is protected: PERMISSION_DENIEDSurfaceFlinger:captureScreen failed to readInt32:-1?