• Scrcpy 工具码流格式化 at 2021年09月18日

    minitouch 不用想了,安卓 10 以上启动 stfservice.apk,效果等同 minitouch,因为命令是一样的
    adb push STFService.apk /data/local/tmp
    adb shell CLASSPATH=STFService.apk exec app_process /system/bin jp.co.cyberagent.stf.MinitouchAgent
    adb forward tcp:30000 localabstract:minitouchagent

  • 修改作者 ImageReader 的初始化代码:
    ImageReader.newInstance(
    unlockedVideoSize().getWidth(),
    unlockedVideoSize().getHeight(),
    PixelFormat.RGBA_8888,
    1
    );
    将 2 改成 1 可以解决帧率卡顿问题,副作用是要损失一点性能

  • 非常好的普及贴👍

  • 楼主的原理是复用 scrcpy 的外壳写了个 ImageReder 推图片流的方案,touch 还是用的 scrcpy 的方案:基于安卓 android.hardware.input.IInputManager$Stub 的 asInterface(android.os.IBinder) 获取 android.os.IInterface 的 manager,然后调用 injectInputEvent 方法

  • 自己根据 minicap 官方的 minicap-experimental(kotlin 版本)
    https://github.com/DeviceFarmer/minicap/tree/master/experimental
    ——这个的兼容性简直可以忽略使用,用来借用思路不错
    写了一个基于 ImageReader 的方案,居然和楼主的代码异常相似

    这里面有一些巨坑,提醒下用来做群控的各位同鞋:
    1、部分手机会出现慢推帧的情况,让人感觉卡顿不实时(例如:红米 note8 pro)
    ImageReader 中有个 maxImages 设置是配对使用的
    模式一:
    ImageReader.newInstance(..., maxImages = 2)
    imageReader.acquireLatestImage()
    模式二:
    ImageReader.newInstance(..., maxImages = 1)
    imageReader.acquireNextImage()
    换模式二时图像就会实时了
    2、部分手机会出现翻转会出现:BufferQueue has been abandoned
    ——在翻转的时候 sleep 下可解决
    3、如果想刷新页面而不关闭应用,注意部分手机 handler 会异常
    ...
    while (true) {
    LocalSocket videoSocket = localServerSocket.accept();
    ...
    }
    搞了很久解决了乱七八糟的问题,将近 200 台设备兼容性不易呀,后续有空做个专门的话题记录下过程

  • 1、一个 socket connect 两次,第一个是视频流,第二个是控制流
    2、可以修改下 accept 的逻辑,可以不用重启
    ...
    while (true) {
    LocalSocket videoSocket = localServerSocket.accept();
    ...
    }

  • libcompress.so 有没有放入/data/local/tmp

  • 注册成功