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?


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

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.


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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.