Ejecutar propio ejecutable en el shell de Android

14

Necesito una herramienta de línea de comandos específica y he creado un programa en C en mi shell de Linux. He compilado el programa con un compilador cruzado ARM. Luego moví el programa al sistema de archivos de Android e intenté ejecutarlo.

La salida es permiso denegado.

¿Qué debo hacer para ejecutar mis propios programas compilados en el sistema de archivos de Android?

Nuno Santos
fuente
Probado chmod +x pgmy luego ./pgmtambién?
ott--
8
Posiblemente lo colocó en su tarjeta sd, que está montada con la noexecbandera. Debe moverlo al almacenamiento interno del teléfono o ejecutarlo a través de un shell (por ejemplo sh /path/to/myexecutable).
Izzy
2
stackoverflow.com/questions/9868309/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

14

Supongo que usó adb push para cargar su ejecutable en la tarjeta SD. Lamentablemente, la tarjeta SD siempre está montada con "noexec", lo que significa que no puede ejecutar nada desde aquí.

Por lo tanto, debe copiar el ejecutable en el sistema de archivos local, por ejemplo, a / data / local. En caso de que el dispositivo no esté rooteado o no tenga instalado BusyBox, no habrá un comando "cp". Simplemente puedes usar cat:cat /sdcard/myprog > /data/local/myprog .

Luego debe establecer el permiso ejecutable en el ejecutable. Chmod en Android generalmente no admite la sintaxis "u + x". Por eso tienes que llamarchmod 555 /data/local/myprog .

Después se puede ejecutar el ejecutable: /data/local/myprog.

Robert
fuente
Gracias por su respuesta. De hecho, el problema estaba en la generación binaria. ¡No se estaba generando correctamente! ;)
Nuno Santos
Tengo busybox en mi dispositivo, pero este comando: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: no se puede crear '/ data / ffmpeg ': Permiso denegado
Dr.jacky
tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directoryaunque el archivo está presente
Necktwi
/ data / local requiere acceso de root en mi dispositivo. Use / data / local / tmp en su lugar
Chan Tzish
10

Primero, debe insertarlo en un directorio, como /data/local/tmp. Luego, debe establecer el permiso para ese uso chmod 755 executable. Después de eso, puedes ejecutarlo como./executable .

Los pasos completos son los siguientes:

adb push ejecutable / data / local / tmp
adb shell
cd / data / local / tmp
chmod 755 ejecutable
./ejecutable

Alternativamente, si desea ejecutarlo desde su carpeta de activos, debe copiar el archivo a su carpeta de datos /data/data/packagename/. Luego, usando la Fileclase, establezca el setExecutableindicador truepara el archivo y ejecútelo por la clase de proceso o paquetes de terceros como Root Tools .

Koorosh Ghorbani
fuente