Heim >Java >javaLernprogramm >Warum werden „su'-Befehle in Java- und Emulator-Terminals unterschiedlich ausgeführt?

Warum werden „su'-Befehle in Java- und Emulator-Terminals unterschiedlich ausgeführt?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 09:51:03456Durchsuche

Why Does Executing

Ausführen von Shell-Befehlen von Android: Eine Analyse einer häufigen Fallstricke

Bei der Android-Entwicklung kann es vorkommen, dass die Ausführung von Shell-Befehlen erforderlich ist . Beim Versuch, solche Befehle aus einer Java-Anwendung heraus auszuführen, können jedoch häufige Fallstricke auftreten. Ein solcher Fallstrick wird beim Befehl „su“ beobachtet, der Superuser-Berechtigungen auf gerooteten Geräten gewährt.

Stellen Sie sich das Szenario einer Bildschirmaufnahme mit dem Befehl „screenrecord“ vor. Wenn der Befehl über das Anwendungsemulator-Terminal ausgeführt wird, wird die Aufzeichnung erfolgreich initiiert. Die Ausführung desselben Befehls aus Java mit der Methode Runtime.getRuntime().exec() schlägt jedoch beim Erstellen der Aufzeichnung fehl.

Die Diskrepanz ergibt sich aus der Methode der Übergabe von Befehlen an den „su“-Prozess. Das Emulator-Terminal ermöglicht die direkte Eingabe von Befehlen, während in Java der Befehl als Eingabe für den „su“-Prozess über seine Standardeingabe bereitgestellt werden muss.

Die Lösung besteht darin, den Befehl an die „su“-Prozesse umzuleiten Standardeingabe mit DataOutputStream. Hier ist der überarbeitete Codeausschnitt:

try{
    Process su = Runtime.getRuntime().exec("su");
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

    outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n");
    outputStream.flush();

    outputStream.writeBytes("exit\n");
    outputStream.flush();
    su.waitFor();
}catch(IOException e){
    throw new Exception(e);
}catch(InterruptedException e){
    throw new Exception(e);
}

Durch die Umleitung des Befehls zur Standardeingabe empfängt der „su“-Prozess den Befehl und erhöht ihn mit Root-Rechten, wodurch die Bildschirmaufzeichnung erfolgreich ausgeführt wird. Diese Technik stellt sicher, dass Shell-Befehle effektiv von Android-Anwendungen ausgeführt werden können, selbst wenn dafür Superuser-Rechte erforderlich sind.

Das obige ist der detaillierte Inhalt vonWarum werden „su'-Befehle in Java- und Emulator-Terminals unterschiedlich ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn