27 votos

Ejecutar el propio ejecutable en el shell de Android

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

La salida es permiso denegado.

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

0 votos

Probado chmod +x pgm y luego ./pgm ¿También?

8 votos

Posiblemente lo colocaste en tu tarjeta sdcard -- que está montada con el noexec bandera. Es necesario moverlo al almacenamiento interno del teléfono, o ejecutarlo a través de un shell (por ejemplo sh /path/to/myexecutable ).

2 votos

23voto

pr0nin Puntos 353

Supongo que has utilizado adb push para subir tu ejecutable a la tarjeta sd. Por desgracia, la tarjeta sd siempre se monta con "noexec", lo que significa que no se puede ejecutar nada desde aquí.

Por lo tanto, tienes que copiar el ejecutable en el sistema de archivos local, por ejemplo, en /data/local. En caso de que el dispositivo no esté rooteado o no tengas BusyBox instalado no habrá comando "cp". Puedes usar simplemente cat: cat /sdcard/myprog > /data/local/myprog .

Luego hay que establecer el permiso de ejecución en el ejecutable. Chmod en Android normalmente no soporta la sintaxis "u+x". Por lo tanto, tiene que llamar a chmod 555 /data/local/myprog .

Después puedes ejecutar tu ejecutable: /data/local/myprog .

0 votos

Gracias por su respuesta. En realidad el problema estaba en la generación del binario. No se estaba generando correctamente ;)

0 votos

Tengo busybox en mi dispositivo, pero este comando: shell@n200C:/ $ busybox cp /storage/external_storage/sda1/ffmpeg /data/ ------ show error= cp: can't create '/data/ffmpeg': Permiso denegado

0 votos

tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin‌​/clang++: No such file or directory aunque el archivo esté presente

18voto

En primer lugar, hay que introducirlo en un directorio, como por ejemplo /data/local/tmp . A continuación, hay que establecer el permiso para ello mediante chmod 755 executable . Después de eso, puedes ejecutarlo como ./executable .

Los pasos completos son los siguientes:

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

Alternativamente, si quieres ejecutarlo desde tu carpeta de activos, tienes que copiar el archivo en tu carpeta de datos /data/data/packagename/ . A continuación, utilizando File se establece la clase setExecutable bandera a true para el archivo y ejecutarlo mediante la clase Process o paquetes de terceros como Herramientas para root .

ACTUALIZACIÓN
si usted está apuntando a sdk 29 o superior no puede utilizar el binario de su carpeta de activos! usted tiene que copiar su binario a la carpeta jnilib entonces ejecutarlo desde el directorio de la biblioteca nativa! context.getApplicationInfo().nativeLibraryDir

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X