/ / Come eseguire i comandi di shell da Ruby nella propria shell? - android, ruby, shell, adb

Come eseguire comandi di shell da Ruby nella propria shell? - android, ruby, shell, adb

Sto scrivendo un piccolo script Ruby che esegue alcuni comandi della shell adb. Il problema si verifica quando tento di eseguire una registrazione dello schermo sul dispositivo Android e quindi inviare alcuni eventi di scorrimento e tocco.

Se eseguo shell adb screenrecord senza un "&" alla fine il tocco e lo scorrimento, gli eventi accadono solo quando il screenrecord il tempo è scaduto:

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

Se lo eseguo con un "&" alla fine, il screenrecord taglia immediatamente quando viene eseguito un evento touch o swipe nonostante il passaggio di un massimo --time-limit opzione a screenrecord.

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

C'è un modo in cui posso semplicemente creare un processo figlio che lo esegua screenrecord e muore appena quando il screenrecord è finito e in parallelo esegui tocchi e scorri?

Ho provato a usare fork ma il genitore finisce per morire e se riesisto il programma i tocchi e i colpi vengono eseguiti.

Questo è il codice che ho usato per fork:

def adb(arg)
fork do
exec("adb -s #{ARGV[0]} #{arg}")
exit
end
end

Ho provato a guardare spawn in alternativa, ma non funzionerebbe:

  if line.include? "<record>"
puts "comes here"
duration=line.scan(/d+/).first.to_i
adb_sep("shell screenrecord --time-limit #{duration} /sdcard/demo.mp4")

Fondamentalmente analizza un file XML con tag per attivare un processo di registrazione. Sono fiducioso che exec non stia fallendo perché ho provato a simulare i passaggi in IRB.

In esecuzione

irb>>exec(<adb screenrecord command>)

uccide il guscio di Ruby dopo che è stato fatto come previsto comunque.

irb>>system(<adb screenrecord command>&)
irb>>system(<adb tap or swipe command>)

funziona come un sogno! Fa esattamente quello che voglio che faccia. L'estrazione del video registrato dal dispositivo mostra esattamente quello che voglio.


Penso di aver capito cosa sta succedendo. Esecuzione di adb con & ha inviato il processo adb in background e la registrazione è stata interrotta. L'esecuzione del tocco adb lo riporta in primo piano. di conseguenza sto ottenendo video tritati.

Immagino che dovrei innescare l'AdB Screenrecord nella sua stessa shell.

Un'analogia bash con un essere umano sarebbe quella di aprire un terminale, iniziare a registrare lo schermo. Apri un altro terminale, inizia a inviare tocchi e scorri.

risposte:

0 per risposta № 1

A quanto pare questo è stato un problema di registrazione dello schermo della shell Android e non un problema di Ruby.

Android sta eseguendo ottimizzazioni della lunghezza del video registrato che distorce il mio video di output. Registra solo il video dalla prima modifica dell'interfaccia utente all'ultima modifica dell'interfaccia utente.