我正在写一个小的Ruby脚本来执行一些adb shell命令当我试图在android设备上运行屏幕记录,然后发送一些刷卡和触摸事件时,就会出现问题。
如果我运行adb shellscreenrecord时,在触摸和滑动结束时没有"&",则仅当screenrecord超时时才会发生事件:

adb shell screenrecord --time-limit 10 /sdcard/dumper.mp4

如果我在最后用"&"运行它,screenrecord会在执行触摸或刷卡事件时立即剪切,尽管会将高--time-limit选项传递给screenrecord
adb shell screenrecord --time-limit 10 /sdcard/dumper.mp4&

有没有一种方法可以创建一个子进程,让它运行screenrecord并在screenrecord完成并并行执行触摸和刷卡时死亡?
我试过使用fork但家长最终会死,如果我退出程序,触摸和刷卡就会被执行。
这是我用来派生的代码:
def adb(arg)
    fork do
        exec("adb -s #{ARGV[0]} #{arg}")
        exit
    end
end

我试着把spawn作为一个替代方案,但它根本不起作用:
  if line.include? "<record>"
  puts "comes here"
  duration=line.scan(/\d+/).first.to_i
  adb_sep("shell screenrecord --time-limit #{duration} /sdcard/demo.mp4")

它基本上解析一个带有标记的xml文件来触发一个记录进程。我相信执行官不会失败,因为我试着模拟IRB中的步骤。
跑步
irb>>exec(<adb screenrecord command>)

不过,在按预期完成后杀死Ruby外壳。
irb>>system(<adb screenrecord command>&)
irb>>system(<adb tap or swipe command>)

像做梦一样工作!它做的正是我想要它做的。从设备中提取录制的视频正好显示了我想要的内容。
我想我已经搞清楚了使用&运行adb将adb进程发送到后台并停止记录运行adb tap使它回到前台结果我被剪辑成视频。
我想我必须在它自己的外壳中触发adb的屏幕记录。
一个与人类的bash类比是打开一个终端,开始记录尖叫声。打开另一个终端,开始发送点击和刷卡。

最佳答案

事实证明,这是一个Android shell屏幕记录问题,而不是Ruby问题。
android正在对录制的视频长度进行优化,这会扭曲我的输出视频。它只记录从第一次ui更改到最后一次ui更改的视频。

10-08 00:23