I am trying to use some c shared libraries in my android application. The project structure is like:
project
|
|---app->main.cpp, Android.mk
|
|---lib->|->Android.mk
|
|---include----|
| |---mylib->a.h, b.h ...
|
|---libs-> libX.so, libY.so, libZ.so
In the main.cpp, I use the header files like:
#include <mylib/a.h>
#include <mylib/b.h>
In the /project/app/Android.mk, I have
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_application
LOCAL_SHARED_LIBRARIES := the_libX_1_0_0 the_libY_1_0_0 the_libZ_0_0_9
LOCAL_SRC_FILES := main.cpp
include $(BUILD_SHARED_LIBRARY)
In the /project/lib/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := the_libX_1_0_0
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/libX.so
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := the_libY_1_0_0
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/libY.so
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := the_libZ_0_0_9
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/libZ.so
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
[The build error]
When I try to make the application, the error I had:
including ./Android.mk ...
build/core/binary.mk:1345: *** project/lib/Android.mk: the_libX_1_0_0: Unused source files: project/lib/libs/the_libX_1_0_0.so.
build/core/ninja.mk:155: recipe for target 'out/build-aosp_arm.ninja' failed
make: *** [out/build-aosp_arm.ninja] Error 1
AOSP environment:
- PLATFORM_VERSION := 6.0.1
- PLATFORM_SDK_VERSION := 23
- PLATFORM_JACK_MIN_SDK_VERSION := 24
Development environment:
- Ubuntu 16.04 LTS
- GCC 5.4
A bit more background about the question:
Actually, the library libX, libY and libZ are libcrypto.so, libssl.so and libc.so. Google uses a shrunk version of OpenSSL, I am working on an application requires the OpenSSL. So I am trying to use pre-built OpenSSL libraries here.
References:
https://developer.android.com/ndk/guides/prebuilts.html#dm
Android NDK/JNI: Building a shared library that depends on other shared libraries
http://www.scriptscoop3.com/t/84e1c84496bc/android-difference-between-local-export-c-includes-and-local-c-includes.html