2012-09-23 17 views
7

Quiero construir una biblioteca de terceros utilizando el ndk avahi. avahi ya tiene el puerto de Android (con Android.mk válido).biblioteca de compilación de ndk fuera del árbol de código fuente del proyecto principal

Lo que he hecho: He creado con éxito un proyecto y he copiado todo el código fuente en jni/folder y ejecuto ndk-build. Construye libavahi.so

Lo que quiero hacer: En lugar de copiar todo el código fuente en jni/carpeta, me gustaría almacenarlo en una carpeta fuera del árbol fuente del proyecto. ¿Qué debo hacer? He revisado NDK DOCUMENTATION/Import Module pero nada es similar a mi caso.

Novato en ndk, y cualquier sugerencia es bienvenida.

Respuesta

5

Tiene razón, este no es el caso de Módulo de importación. La forma en que hace referencia a la biblioteca avihi desde su código nativo seguirá siendo como LOCAL_SHARED_LIBRARIES (consulte la muestra NDK module-exports). Pero en su archivo jni/Android.mk, puede usar el comando include en otro archivo. Este comando es muy similar a la declaración #include en C. Este archivo no necesita estar dentro de su árbol de proyecto. Teniendo la misma muestra, aquí es cómo se puede trabajar:

original Android.mk from samples/module-exports/jni:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo/foo.c 
LOCAL_CFLAGS := -DFOO=2 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo 
LOCAL_EXPORT_CFLAGS := -DFOO=1 
LOCAL_EXPORT_LDLIBS := -llog 
include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := bar 
LOCAL_SRC_FILES := bar/bar.c 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar 
LOCAL_STATIC_LIBRARIES := foo 
include $(BUILD_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := zoo 
LOCAL_SRC_FILES := zoo/zoo.c 
LOCAL_SHARED_LIBRARIES := bar 
include $(BUILD_SHARED_LIBRARY) 

El archivo modificado se verá de la siguiente manera:

ZOO_LOCAL_PATH := $(call my-dir) 
include ~/projects/bar/jni/Android.mk 
LOCAL_PATH := $(ZOO_LOCAL_PATH) 

include $(CLEAR_VARS) 
LOCAL_MODULE := zoo 
LOCAL_SRC_FILES := zoo/zoo.c 
LOCAL_SHARED_LIBRARIES := bar 
include $(BUILD_SHARED_LIBRARY) 

y lo externo barra /jni/Android.mk de la siguiente manera:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo/foo.c 
LOCAL_CFLAGS := -DFOO=2 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo 
LOCAL_EXPORT_CFLAGS := -DFOO=1 
LOCAL_EXPORT_LDLIBS := -llog 
include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := bar 
LOCAL_SRC_FILES := bar/bar.c 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar 
LOCAL_STATIC_LIBRARIES := foo 
include $(BUILD_SHARED_LIBRARY) 

¡Ahora, los archivos bar.c y foo.c pueden mantenerse fuera del árbol del proyecto del zoológico!

Cuestiones relacionadas