2017-03-09 6 views
0

Ich arbeite mit gerooteten Android-Tabletten und ich möchte Shell-Befehlszeilen ausführen. Ich habe jedoch gesehen, dass sie aufhören, wenn die Befehls-Launcher-App stoppt. Gibt es eine Möglichkeit, die Ausführung der Shell-Befehle trotz der gestoppten Originator-App beizubehalten?Android-Laufzeit exec stoppt, wenn Anrufer stoppt

Dank

Das ist genau das, was ich ausführen wollen. Ich möchte in der Lage, meine app in meiner App zu aktualisieren:

cmd ich in meinem App ausführen möchten:

am force-stop myapp & install newVersionOfMyApp.apk & monkey -p myapp 1 

Dann, wenn der erste Teil des Befehls ausgeführt wird, Rest nicht ausgeführt wird. Ich habe gesehen, dass dies in anderen Betriebssystemen gelöst werden kann, indem man den Befehl ändert (Windows fügt ein "cmd" hinzu und linux fügt "&" am Ende hinzu). Hat Android einen gleichwertigen Weg?

Antwort

0

Schließlich fand ich die Lösung. Sie können dies tun, indem sie nach einem nohup Befehl setzen:

nohup sh -c 'am force-stop myapp && install newVersionOfMyApp.apk && monkey -p myapp 1' & 

EDITED mit Informationen von @syslogic

+0

verwenden Sie entweder '&&' oder ';' statt '&' - dann werden die Befehle sequentiell verarbeitet werden (und kein 'at' ist erforderlich, während man nicht einmal weiß, wie lange man wartet). Der '&' Operator ist nur gut um einen einzelnen Befehl zu trennen (daher würde ich diese "Lösung" in Frage stellen). –

+0

Danke! Ich habe es entsprechend bearbeitet. – jevora

0

Sie müssten das TTY von der Konsole mit einem & (hinter dem Befehl) trennen; Wenn der Befehl exit 0 (Erfolg) oder exit 1 (Fehler) hat, wird die Ausführung trotzdem angehalten. Das Ausführen von Cron-Jobs würde überhaupt keine Konsole erfordern. Was ich im Grunde versuche zu sagen ist, dass Sie wahrscheinlich die Art und Weise, wie Sie die Befehle dorthin setzen, überdenken sollten - während adb shell oder Cron keine GUI benötigt.

gibt es auch adb shell monkey - während der MonkeyRunner (inzwischen) mit dem UI Automator aus der Support Library ersetzt worden sein könnte.

ist es Monkey vs. UI Automator.

Ich würde es schreiben, wie dies etwa in bash - auf einem PC - mit ADB:

adb install -r com.acme.apk && adb shell monkey -p com.acme.AppName -v 500

+0

bitte, bearbeiten die Frage lesen, hatte ich einige Präzisierungen vorgenommen. Vielen Dank! – jevora

+0

@jevora hat gerade herausgefunden, dass der '-r' Schalter ein installiertes APK ersetzen kann, während man affe auch mit adb starten kann ... es benötigt nur ein USB Kabel, aber keinen Shell Terminal Client auf Android (daher es würde auch keine Interferenz geben, beim Testen). Ich kann sehen, dass es nicht genau das ist, wonach du fragst, aber wahrscheinlich der üblichste Weg, es zu tun. –

+0

Das scheint eine nette Lösung bei der Verwendung der AdB-Shell. Wenn Sie jedoch versuchen, die Befehlszeile innerhalb einer App auszuführen (unter Verwendung von Runtime.exec), wenn Sie "nohup" nicht verwenden, wird die Befehlsausführung beendet, sobald ich die erzwungene Beendigung der aufrufenden Anwendung erzwinge. Grundsätzlich, was ich dank Nohup geschafft habe, ist es, die gleiche APP, die das Update macht, zu aktualisieren. Es ist wie wenn Google Play Update selbst, dass es Neustart nach der Installation von Apk erfordert (deshalb verwende ich Force-Stop und Affe nach der Installation apk) – jevora