使用多个平台上包含的共享库构建NDK

时间:2016-02-16 11:33:08

标签: eclipse c++11 android-ndk shared-libraries multiplatform

我在Eclipse中使用NDK构建器构建了一个C ++共享库(匆忙创建一个没有MainActivity的JNI项目),它提供了我在Application.mk文件中指定的不同平台作为输出。输出位于/ obj / local /目录中,分布在平台子目录(armabi,mips,...,即我在上面文件中指定的所有平台)。 现在,我想在Android本机项目中使用这个共享库,我的共享库在项目的本机库中调用(因此它是关于" native-calling-native")。 如果我只为一种类型的平台构建共享库和Android原生应用程序(让我们说" armeabi"),一切正常。 我的问题是如何创建Android本机项目的make文件Android.mk和Application.mk,以便为所有平台构建。 我想关键是在Android.mk文件中,对于一个平台构建它看起来像这样(在Linux上,对于.so类型,C ++ 11用于信息):

LOCAL_PATH := $(call my-dir)

# Define the shared library module used by the calling JNI C++ module
include $(CLEAR_VARS)

LOCAL_SRC_FILES := libs/libCreateSharedWithJni.so
LOCAL_MODULE := CreateSharedWithJni
LOCAL_EXPORT_C_INCLUDES := libs/CreateSharedWithJni.h
include $(PREBUILT_SHARED_LIBRARY)

# Define the calling JNI C++ module
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_MODULE    := finalmodule
LOCAL_SRC_FILES := CppJniCallShared.cpp

LOCAL_SHARED_LIBRARIES := libCreateSharedWithJni

include $(BUILD_SHARED_LIBRARY)

谢谢!

1 个答案:

答案 0 :(得分:1)

知道了! 在上面的Android.mk文件中,只需更改以下行

LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libCreateSoWithJni.so

即。在路径中使用$(TARGET_ARCH_ABI)驱动构建器来处理Application.mk APP_ABI变量中指定的所有平台。