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!