Ausführen einer eigenen ausführbaren Datei auf der Android-Shell

14

Ich benötige ein bestimmtes Kommandozeilen-Tool und habe in meiner Linux-Shell ein C-Programm erstellt. Ich habe das Programm mit einem ARM-Cross-Compiler kompiliert. Ich habe dann das Programm in das Android-Dateisystem verschoben und versucht, es auszuführen.

Die Ausgabe ist die Berechtigung verweigert.

Was muss ich tun, um meine eigenen kompilierten Programme im Android-Dateisystem auszuführen?

Nuno Santos
quelle
Versucht chmod +x pgmund dann ./pgmauch noch?
ott--
8
Möglicherweise haben Sie es auf Ihre SD-Karte gelegt - die mit der noexecFlagge montiert ist . Sie müssen es entweder in den internen Speicher des Telefons verschieben oder über eine Shell (z sh /path/to/myexecutable. B. ) ausführen .
Izzy

Antworten:

14

Ich gehe davon aus, dass Sie adb push zum Hochladen Ihrer ausführbaren Datei auf die SD-Karte verwendet haben. Leider ist die SD-Karte immer mit "noexec" gemountet, was bedeutet, dass Sie von hier aus nichts ausführen können.

Daher müssen Sie die ausführbare Datei in das lokale Dateisystem kopieren, z. B. nach / data / local. Falls das Gerät nicht gerootet ist oder Sie keine BusyBox installiert haben, wird kein "cp" -Befehl ausgegeben. Sie können einfach cat: verwenden cat /sdcard/myprog > /data/local/myprog.

Dann müssen Sie die ausführbare Berechtigung für die ausführbare Datei festlegen. Chmod auf Android unterstützt normalerweise nicht die "u + x" -Syntax. Deshalb musst du anrufen chmod 555 /data/local/myprog.

Danach können Sie die ausführbare Datei ausführen: /data/local/myprog.

Robert
quelle
Danke für deine Antwort. Tatsächlich lag das Problem bei der binären Generation. Es wurde nicht korrekt generiert! ;)
Nuno Santos
Ich habe busybox auf meinem Gerät, aber diesen Befehl: shell @ n200C: / $ busybox cp / storage / externer_speicher / sda1 / ffmpeg / data / ------ show error = cp: kann / data / ffmpeg nicht erstellen ': Erlaubnis verweigert
Dr.jacky
tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directoryObwohl die Datei vorhanden ist
Necktwi
9

Zuerst müssen Sie es in ein Verzeichnis verschieben, z /data/local/tmp. Dann müssen Sie die Berechtigung für diese Verwendung festlegen chmod 755 executable. Danach können Sie es als ausführen ./executable.

Die vollständigen Schritte lauten wie folgt:

adb push executable / data / local / tmp
ADB Shell
cd / data / local / tmp
chmod 755 ausführbar
./ausführbar

Wenn Sie es alternativ aus Ihrem Asset-Ordner ausführen möchten, müssen Sie die Datei in Ihren Datenordner kopieren /data/data/packagename/. FileSetzen Sie dann mithilfe von class das setExecutableFlag truefür die Datei und führen Sie sie durch die Process-Klasse oder Pakete von Drittanbietern wie Root Tools aus .

Koorosh Ghorbani
quelle