¿Cómo ejecuto un binario compilado en Android?
He estado tratando de ejecutar un compilado binario en mi teléfono Android, pero sólo sigue diciéndome "No tal archivo o directorio".
Para ser específico, he compilado wificurse , y como la descripción tiene mención a un comando de brazo es obvio que el código fuente se puede compilar para una arquitectura de brazo sin hacer ningún cambio en el makefile. Y así hice lo siguiente:
- Adb shell screencap - "permiso denegado"
- ¿Cómo utilizar crontab en Android?
- ¿Cómo iniciar el dispositivo Genymotion con el comando shell?
- Cambiar permiso de archivo en la aplicación
- Shell / scripts por lotes para dirigir comandos a adb shell
export CROSS_COMPILE=arm-linux-gnueabi- make CROSS_COMPILE=arm-linux-gnueabi-
Y luego con el binario resultante (wificurse) hice lo siguiente:
adb push wificurse /data
En una raíz adb shell lo hice:
root@android:/data # chmod 0777 wificurse
No devuelve nada; trabajos.
root@android:/data # chmod u+x wificurse
Devuelve "Modo incorrecto".
root@android:/data # busybox chmod 077 wificurse
No devuelve nada; trabajos.
root@android:/data # busybox chmod u+x wificurse
No devuelve nada; trabajos.
Pero cuando intento ejecutar el binario con
root@android:/data # ./wificurse
Devuelve "/ system / bin / sh: ./wificurse: No existe tal archivo o directorio". Hizo un ls en la carpeta y el binario está realmente allí.
Ya intentó copiar el binario en el sdcard interno, luego moviéndose a / data (incluso intentó / system / bin y / system / xbin) y devuelve "Access denied", pero si chmod el binario devolverá el mismo error (No Tal archivo o directorio). ¿Podría alguien ayudarme, por favor? He utilizado el shell linux para 2 + años, aunque soy completamente un noob cuando se trata de programación de cosas. Supongo que estoy perdiendo algo como una cadena de herramientas, no lo sé.
Estoy ejecutando Ubuntu 15.10 x64.
- ¿Cómo puedo usar adb para desinstalar un APK de varios dispositivos conectados?
- Escribir una aplicación para Android que ejecuta comandos de Linux
- Construir UiAutomator 2.0 desde la línea de comandos
- Introducción de shell ADB dentro de un directorio específico en el dispositivo conectado utilizando sólo una sola línea de código de terminal
- Compruebe si el directorio existe en Android sdcard con bash
- ¿Cómo puedo obtener el tamaño del sistema de archivos android en bytes de shell de adb?
- ¿Cómo averiguar los nombres de las actividades en un paquete? androide. Shell ADB
- ¿Cómo desinstalar la propia aplicación de / system / app?
¿Has probado los métodos en este hilo? "Ningún archivo o directorio" que intenta ejecutar linux binario en el dispositivo Android
Una forma alternativa de resolver este problema sería instalar KBOX en Android. El autor ha desarrollado herramientas como gcc, servidor ssh para la plataforma Android. Por lo tanto, puede iniciar un servidor ssh en su teléfono y hacer todo su trabajo en su PC, lo que significa que puede compilar su código directamente en el teléfono 🙂
Aparentemente, su binario depende de alguna biblioteca compartida (.so) que no sea visible para la vinculación dinámica. Usted puede usar readelf
de su toolchain y usted consigue algo como esto:
tom@pc:~/workspace/test/arm-v7a_android9/release$ ~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/bin/arm-linux-androideabi-readelf -d test Dynamic section at offset 0x445a14 contains 27 entries: Tag Type Name/Value 0x00000003 (PLTGOT) 0x44fc50 0x00000002 (PLTRELSZ) 1864 (bytes) 0x00000017 (JMPREL) 0x74d24 0x00000014 (PLTREL) REL 0x00000011 (REL) 0x74cd4 0x00000012 (RELSZ) 80 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000015 (DEBUG) 0x0 0x00000006 (SYMTAB) 0x8148 0x0000000b (SYMENT) 16 (bytes) 0x00000005 (STRTAB) 0x26718 0x0000000a (STRSZ) 273460 (bytes) 0x00000004 (HASH) 0x6934c 0x00000001 (NEEDED) Shared library: [liblog.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000001a (FINI_ARRAY) 0x447cb8 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000019 (INIT_ARRAY) 0x447cc4 0x0000001b (INIT_ARRAYSZ) 324 (bytes) 0x00000020 (PREINIT_ARRAY) 0x447e08 0x00000021 (PREINIT_ARRAYSZ) 0x8 0x0000001e (FLAGS) BIND_NOW 0x6ffffffb (FLAGS_1) Flags: NOW 0x00000000 (NULL) 0x0
Compruebe que todas las bibliotecas con el tipo (NEEDED)
están en su dispositivo Android y son visibles para su binario (debe utilizar la export LD_LIBRARY_PATH=<path>[:<another_path>[..]]
. binario).
Si el problema aún no se resuelve, su aplicación está vinculada a una versión diferente de alguna biblioteca del sistema. Intente utilizar una cadena de herramientas más antigua.