在多个平台上使用包含的共享库构建 NDK
Build NDK with included shared library on multiple platforms
我在 Eclipse 中使用 NDK 构建器构建了一个 C++ 共享库(首先创建了一个没有 MainActivity 的 JNI 项目),它提供了我在 Application.mk 文件中指定的不同平台的输出。输出位于 /obj/local/ 目录中,分布在平台子目录中(armabi、mips ……即我在上述文件中指定的所有平台)。
现在,我想在一个 Android 原生项目中使用这个共享库,我的共享库在一个项目的原生库中被调用(因此它大约是 "native-calling-native")。
如果我只为一种类型的平台(比方说 "armeabi")同时构建共享库和 Android 本机应用程序,则一切正常。
我的问题是如何创建 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)
谢谢!
知道了!
在上面的 Android.mk 文件中,只需将行更改为以下
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libCreateSoWithJni.so
即在路径中使用 $(TARGET_ARCH_ABI) 驱动构建器处理 Application.mk APP_ABI 变量中指定的所有平台。
我在 Eclipse 中使用 NDK 构建器构建了一个 C++ 共享库(首先创建了一个没有 MainActivity 的 JNI 项目),它提供了我在 Application.mk 文件中指定的不同平台的输出。输出位于 /obj/local/ 目录中,分布在平台子目录中(armabi、mips ……即我在上述文件中指定的所有平台)。 现在,我想在一个 Android 原生项目中使用这个共享库,我的共享库在一个项目的原生库中被调用(因此它大约是 "native-calling-native")。 如果我只为一种类型的平台(比方说 "armeabi")同时构建共享库和 Android 本机应用程序,则一切正常。 我的问题是如何创建 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)
谢谢!
知道了! 在上面的 Android.mk 文件中,只需将行更改为以下
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libCreateSoWithJni.so
即在路径中使用 $(TARGET_ARCH_ABI) 驱动构建器处理 Application.mk APP_ABI 变量中指定的所有平台。