Instalación de un binario preinstalado en Android: "no encontrado"
Estoy intentando instalar un binario pre-construido en una imagen personalizada de Android. Para eso lo he copiado a un nuevo directorio en prebuilt/android-arm/
con un archivo Android.mk
similar a éste:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := binary_name LOCAL_MODULE := binary_name LOCAL_MODULE_CLASS := EXECUTABLES include $(BUILD_PREBUILT)
Así que si ejecuto make system_image binary_name
, el archivo binario se copia en /bin/
in image del sistema. Y si ejecuto el emulador puedo ver el archivo binario en /system/bin
. Los permisos son los mismos que los otros ejecutables ( -rwxr-xr-x
) y, según el file
, se trata de un binario ARM ( ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
- No es posible que el SDKcontroller de Android funcione
- Emulador no funciona en Android Studio
- Cómo eliminar el marco del dispositivo en los emuladores de Android Studio
- Android M (vista previa) Doze mode y AlarmManager
- Cómo utilizar un emulador diferente en Android Studio
Pero cuando lo ejecuto en el emulador, dice:
# binary_name binary_name: not found
He straced y esto es lo que puedo ver:
# strace binary_name execve("/system/bin/binary_name", ["binary_name"], [/* 9 vars */]) = -1 ENOENT (No such file or directory) write(2, "strace: exec", 12strace: exec) = 12 write(2, ": ", 2: ) = 2 write(2, "No such file or directory", 25No such file or directory) = 25 write(2, "\n", 1 ) = 1 io_submit(1, -1344063348, {...} <unfinished ... exit status 1>
Pero el archivo está ahí, y strace es capaz de encontrarlo.
¿Alguna idea de lo que puede estar pasando?
ACTUALIZACIÓN : Como Kristof dice, este es probablemente un problema de vinculación dinámica, pero no tengo ldd para Android ARM …
- ¿Emulador de Android versión 16.0 persistant / system / storage?
- 'Webpage not available' con WebView.loadData () SOLAMENTE en el emulador
- ¿Cómo puedo añadir la biblioteca a la carpeta lib de Android-Emulator?
- Iniciar mi aplicación en genymotion
- El emulador no funciona en Android Studio 2.0
- ¿Cómo puedo hacer que eclipse se conecte al emulador de Android manualmente?
- Archivos de copia del emulador android en la partición del sistema
- Servidor de acceso de emulador androide en red local
Tal vez algunas de las bibliotecas dinámicas necesarias no se pueden encontrar.
Intente 'ldd nombre_binario'
La salida debe verse un poco como esto si todas las bibliotecas se pueden encontrar. Las bibliotecas que faltan deben estar claramente marcadas.
linux-gate.so.1 => (0xb7fbf000) libcap.so.2 => /lib/libcap.so.2 (0xb7fa7000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7fa3000) libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7f64000) libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7f3e000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dde000) libattr.so.1 => /lib/libattr.so.1 (0xb7dd9000) /lib/ld-linux.so.2 (0xb7fc0000)