我有一个第三方共享库(.so)和一些类(C ++)。我想在我的Android应用程序中使用此库。我打算用C ++编写一段代码,用于访问第三方共享库。访问第三方共享库的代码将放在共享库中(mySHaredLibrary.so)。我的疑问是如何编译mySHaredLibrary.so,我如何在我的make文件中指出mySHaredLibrary.so依赖于第三方共享库。
我正在使用android ndk r10d for windows 64位。 (https://developer.android.com/tools/sdk/ndk/index.html)
答案 0 :(得分:0)
我们假设外部lib名为 libThirdParty.so ,并且您拥有源代码中包含的.h标头以使用它。您可以这样做:
为jni/ThirdPartyLib/<abi>
下的每个体系结构放置.so文件(NDK支持的Android ABI现在是 armeabi,armeabi-v7a,x86,x86_64,arm64-v8a,mips,mips64 )。对于armeabi或armeabi-v7a以及x86,您应该至少拥有一个lib版本,当然,对于所有支持的体系结构,最好有一个版本。
然后,将.h文件放在jni/ThirdPartyLib/include
现在,您可以在Makefile中找到以下内容:
<强> Android.mk 强>:
LOCAL_PATH := $(call my-dir)
# ThirdParty prebuilt
include $(CLEAR_VARS)
LOCAL_MODULE := ThirdParty
LOCAL_SRC_FILES := ThirdPartyLib/$(TARGET_ARCH_ABI)/libThirdParty.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ThirdPartyLib/include
include $(PREBUILT_SHARED_LIBRARY)
# Your lib
include $(CLEAR_VARS)
LOCAL_MODULE := mySHaredLibrary
LOCAL_SRC_FILES := source1.cpp source2.cpp
LOCAL_SHARED_LIBRARIES := ThirdParty
include $(BUILD_SHARED_LIBRARY)
<强> Application.mk 强>
APP_ABI := all # can be "armeabi-v7a x86 mips..." depending on what you support.
APP_PLATFORM := android-14 # should be the same number than in Android project's minSdkVersion.