2012-06-13 10 views
7

Tengo un binario nativo que quiero incluir en el código fuente de Android, de modo que cuando lo compile, mi binario se incluirá en/system/bin.Agregar un binario precompilado en la fuente de Android

He copiado mi binario en la carpeta/prebuilt/android-brazo/mi-binario, y he creado un nuevo Android.mk con lo siguiente:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := my-binary 
LOCAL_MODULE := my-binary 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 

Pero cuando corro hacer, la única referencia que tengo en el registro es el siguiente:

target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary) 

Y el binario no está instalado en system.img en absoluto. Hay una pregunta casi idéntica en Installing a prebuilt binary on Android: "not found", pero el consultante ya conocía el procedimiento básico y no se explica en absoluto. Si ejecuto make my-binary, obtengo la misma línea que publiqué.

También intenté ejecutar make out/target/product/generic/system.img my-binary pero tampoco funciona. Mi binario aparece en la subcarpeta out pero no se incluirá en system.imng

¿Me falta algo? ¿Hay alguna manera de que con solo ejecutar haga -j # mi binario se incluirá en/system/bin?

Respuesta

8

Acabo de probar en mi emulador y está funcionando. Usé como ejemplo gdbserver en esta carpeta. Tengo un archivo crosscompiled para android y lo uso para incrustarlo en la imagen. Entonces, las instrucciones serán para este ejecutable.

  1. Crear una carpeta bajo prebuilt/android-brazo/strace
  2. puesto allí su binario (en mi caso strace)

Agregar archivo Android.mk con el siguiente contenido:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := strace 
LOCAL_MODULE := strace 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 


prebuilt_files := 

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files)) 

Compilar con las instrucciones: mmm prebuilt snod -j4 (si ya tiene imágenes creadas) o usted, por supuesto, también puede usar make -j4.

+0

Sí, he utilizado la Android.mk encuentra en el gdbserver en el mismo directorio para futura referencia, pero no estaba funcionando durante algún readon. Voy a intentar con mmmm; Vuelvo enseguida ... EDITAR: * mmm prebuilt snod -j * funcionó! Voy a hacer un * make clean * y ver si también funciona reconstruir todo desde cero ... – ziritrion

+0

Algo realmente extraño está pasando ... Ejecutar * make * en el código fuente directamente desde el repositorio (sin mi binario) compila bien Pero cuando agrego mi binario, obtengo errores extraños. Lo peor es que incluso si hago un * make clean * y saco mi carpeta (que debería dejar el código fuente como estaba al principio, ya que no estoy tocando nada), cuando intento compilarlo, Aún obtendré errores de compilación. Estoy liberando espacio nad asegurándome de que no es nada relacionado con el código en sí (estoy ejecutando Ubuntu 10.04 en VMware) – ziritrion

+0

make clean simplemente elimine la carpeta 'out'. No cambia el código para desfasarse. ¿Puedes actualizar tu respuesta con los errores que obtienes durante la compilación? – Yury

2

si su binario termina en el directorio de salida pero no en la imagen, es porque no tiene una regla para incluir el binario en la imagen.

en device/<vendorname>/<devicename>/device.mk (o en algún archivo MAKE incluidos por device.mk) es necesario tener una de dos entradas:

PRODUCT_PACKAGES += my-binary 

o:

PRODUCT_COPY_FILES += path/to/my-binary:/root/target/path/to/my-binary 

... Yo sugeriría que el enfoque PRODUCT_PACKAGES; PRODUCT_COPY_FILES es más adecuado para scripts y archivos de configuración.

NOTA: PRODUCT_PACKAGES usa el nombre del módulo, donde PRODUCT_COPY_FILES usa el nombre/ubicación real del binario.

0

También puede lo siguiente que me funciona ..... LOCAL_MDULE_PATH: = $ (TARGET_OUT_OPTIONAL_EXECUTABLES) ... incluyen $ (BUILD_EXECUTABLE)

Cuestiones relacionadas