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
注册成功