Shell-Skript im Hintergrundprozess ausführen, egal welche Aktivität im Vordergrund?

Ich habe ein Shell-Skript, das wie folgt aussieht:

# /mnt/sdcard/touch.sh
sleep 10

while [ 1 ]; do
    input swipe 700 380 1020 600 1000
    input tap 960 540
    input swipe 1220 700 900 480 1000
    input tap 960 540
    input swipe 1220 700 900 480 1000
    input tap 960 540
    input swipe 700 380 1020 600 1000
    input tap 960 540
done

Wenn ich es von Terminal IDE (einem Terminal-Emulator) aus ausführe, funktioniert es nur, während Terminal IDE im Vordergrund ist, also dachte ich, ich würde eine tatsächliche App erstellen, um es auszuführen und es im Hintergrund laufen zu lassen. Hier ist, was ich jetzt habe:

package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.io.*;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            // RIGHT HERE. WHY DOES NOTHING HAPPEN?
            Runtime.getRuntime().exec(new String[]{"/system/bin/sh", "/mnt/sdcard/touch.sh", });
        }
        catch (IOException e) {/*...*/}
    }
}

Aber es bringt nichts.

Wie würde ich das also ausführen und es dann im Hintergrund laufen lassen, damit die Taps und Swipes passieren, während eine andere App im Vordergrund ist? Du hast die Idee. :D

Diese Frage sollte nicht als Offtopic geschlossen werden. Er hat gerade versucht, es per Schreib-App zu lösen, aber seine Frage bezieht sich überhaupt nicht darauf.

Antworten (1)

Es funktionierte, indem man es einfach tat, sh /mnt/sdcard/touch.sh &nachdem man eine Shell mit gestartet hatte adb shell. Als ich dann das Terminal zwangsweise schloss, während der Prozess im Hintergrund lief, lief der Prozess wie erwartet im Hintergrund meines Telefons weiter. Ich konnte den Prozess später beenden, indem ich mit adb shellder Verwendung psdie Prozess-ID fand und kill -s KILL <ID>beendete.

Im Grunde stellte sich heraus, dass ich keine Android-App erstellen musste, nur um mein Skript im Hintergrund laufen zu lassen. Zusammenstoß auf ...

Ich bin neugierig, was verschiedene Versionen von Android Verhalten ist. Ich habe ein Skript geschrieben, um den Batteriestand zu protokollieren, das in einer Endlosschleife läuft - und ich finde, wenn ich wie Sie gegabelt starte und das USB-Kabel ziehe ... dass es tatsächlich anhält ... aber fortgesetzt wird, wenn ich das USB-Kabel zurücksende .
hatte die gleichen Bedürfnisse, die Antwort hat mir sehr geholfen! aber ... seltsamerweise adb shellkonnte ich es ohne Root nur innerhalb von mir tun. Wenn ich genau das gleiche Skript in einer Android-Terminal-App ausführe, konnte ich nur den gleichen Effekt erzielen (um tatsächlich etwas Berührendes zum Laufen zu bringen ), nachdem ich root mit aktiviert hatte su! irgendwelche Anhaltspunkte woran das liegen könnte?