Android 的 shell screencap -p 太慢了,有没有更高效的方法呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
atfeel
V2EX    Android

Android 的 shell screencap -p 太慢了,有没有更高效的方法呢?

  •  
  •   atfeel 2020-04-28 19:54:19 +08:00 13958 次点击
    这是一个创建于 2067 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 V 友,下面是我截屏的代码

    Process process = Runtime.getRuntime().exec("su");

    OutputStreamWriter outputStream = new OutputStreamWrier(process.getOutputStream());

    outputStream.write("/system/bin/screencap -p\n");

    outputStream.flush();

    Bitmap bitmap = BitmapFactory.decodeStream(process.getInputStream());

    outputStream.write("exit\n");

    outputStream.flush();

    outputStream.close();

    执行这个代码能获得 bitmap 图像信息,但是这个代码很慢,如果手机再运行点其他的 APP 耗时会更多 1000ms-6000ms 左右,根本没法用了。

    大家有什么好方法能替代这种方式吗?

    要是能在运行其他耗资源的 APP 的同时控制截屏耗时在 300ms-1000ms 以内。 那真的是个很跨越的突破。

    第 1 条附言    2020-04-28 21:36:26 +08:00
    我指的是屏幕截图,不是 APP view 的界面
    13 条回复    2020-04-30 10:14:13 +08:00
    bage2020
        1
    bage2020  
       2020-04-28 20:07:43 +08:00
    研究一下系统自己的截屏方法,framwork 反射试试
    Anarchy
        2
    Anarchy  
       2020-04-28 21:17:17 +08:00
    我提一个思路吧:获取当前焦点 activity,然后获取 window,获取 decorView,再转换成 bitmap 。
    atfeel
        3
    atfeel  
    OP
       2020-04-28 21:35:52 +08:00
    @Anarchy 我要截屏不是当前 app 的界面,是屏幕截图
    hoholiday
        4
    hoholiday  
       2020-04-28 21:36:52 +08:00 via Android
    mediaprojection 了解一下
    jemyzhang
        5
    jemyzhang  
       2020-04-28 21:38:51 +08:00
    @atfeel #3 是领导要求你后台偷偷截屏吗?
    曾经某大电视大厂领导开大会时就说,我们要统计用户行为,有什么好办法呢,截屏传到服务器解析,喷了喷了
    300
        6
    300  
       2020-04-28 21:44:54 +08:00
    https://github.com/Genymobile/scrcpy

    不知道这个是怎么实现的
    atfeel
        7
    atfeel  
    OP
       2020-04-29 09:23:34 +08:00
    @hoholiday mediaprojection 的话,会出现录制的确认框,不友好
    atfeel
        8
    atfeel  
    OP
       2020-04-29 09:27:45 +08:00   1
    @winterbells 这个和 screencap 一样,都是 C+开发的程序,这些是很资深的高手才能做到,涉及面太广了
    mrcn
        9
    mrcn  
       2020-04-29 09:32:04 +08:00 via Android   1
    @winterbells #6 他在手机上有服务程序的,再通过 tcp 传数据到电脑上
    300
        10
    300  
       2020-04-29 10:09:10 +08:00
    @mrcn #9 哦哦,原来是传 jar 包,我因为是什么 shell 里的 api
    Clay0620
        11
    Clay0620  
       2020-04-29 11:01:40 +08:00
    STF 框架的 minicap 试一下?和 scrcpy 原理应该差不多,都是把屏幕以流的形式,发送到一个指定的端口,你需要把流转换成图片
    huage2580
        12
    huage2580  
       2020-04-30 09:42:09 +08:00
    这个,你是 ROM 定制的 APP 是吗,Rom api 21 以上,VirtualDisplay 省事。
    不然就反射 SurfaceControl,要有 shell 以上权限,我看你都有 su 权限了。
    atfeel
        13
    atfeel  
    OP
       2020-04-30 10:14:13 +08:00
    @CY4suncheng minicap 条件不好,CPU,SDK,版本都会影响,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5281 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 09:00 PVG 17:00 LAX 01:00 JFK 04:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86