Я пытаюсь правильно подключить собственное приложение Android к пользовательскому общему объекту, построенному в том же дереве AOSP.Установочный путь для обычных общих библиотек Android
Я разделяемый объект построен с
LOCAL_SRC_FILES += \
src/libscanengine.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/
LOCAL_C_INCLUDES += kernel/include/
#every module depending on us will
#automagically have this included
LOCAL_EXPORT_C_INCLUDES := \
$(LOCAL_PATH)/include
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libscanengine
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
Он будет построен и установлен в качестве команды мм вызова
build/core/dynamic_binary.mk:141: warning: overriding commands for target `.so'
build/core/dynamic_binary.mk:118: warning: ignoring old commands for target `.so'
build/core/shared_library.mk:54: warning: overriding commands for target `.so'
build/core/dynamic_binary.mk:141: warning: ignoring old commands for target `.so'
No private recovery resources for TARGET_DEVICE X
No recovery.fstab for TARGET_DEVICE X
make: Circular .so <- .so dependency dropped.
make: Circular .so <- out/target/product/X/symbols/system/lib/libscanengine dependency dropped.
make: Circular .so <- .so dependency dropped.
target Non-prelinked: libscanengine (out/target/product/X/symbols/system/lib/libscanengine)
target Strip: libscanengine (out/target/product/X/obj/lib/libscanengine)
Install: out/target/product/X/system/lib/libscanengine.so
После того, как я пытаюсь стро родного приложения, связанное с вновь созданным .so со следующим Android.mk
LOCAL_SRC_FILES := \
src/mores.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/include/
#not working: commented out
#LOCAL_LDLIBS += \
-lscanengine
#LOCAL_C_FLAGS += \
-L../../out/target/product/X/system/lib/
LOCAL_SHARED_LIBRARIES := \
libscanengine
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := mores
include $(BUILD_EXECUTABLE)
Я получаю:
make: *** No rule to make target `out/target/product/X/obj/lib/libscanengine.so', needed by `out/target/product/X/obj/EXECUTABLES/mores_intermediates/LINKED/mores'. Stop.
я заметил две вещи: общая библиотека устанавливается под X/из/Lib, как libscanengine и не libscanenegine.so, как это требуется нативного приложения.
Мне нужно вручную копировать .so каждый раз, что глупо, поскольку все это должно быть каким-то образом обработано системой сборки Android.
Кроме того, директива LOCAL_EXPORT_C_INCLUDES не работает. Работает ли он только с PREBUILT_SHARED_OBJECTS?
Версия для Android 2.3, Java не задействована, все построено под AOSP.
Спасибо
J
ВКЛЮЧАЕТСЯ для компиляции, а не для связывания. Ваш -L мог бы сработать, но это должно было быть LDFLAGS, а не CFLAGS. Вы должны выяснить и исправить неверное. –