4

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

Community
  • 1
  • 1
r0n9
  • 2,505
  • 1
  • 29
  • 43

0 Answers0