在Android NDK中调用C ++类中的SO函数

时间:2015-08-13 05:30:50

标签: java android android-ndk java-native-interface android.mk

如何在新项目中将prebuild .so(C类)文件中的函数调用到C ++类中。例如,我有一个项目-1 创建一个prebuild .so文件。现在在这个项目中我有一个名为“androidNdk”的C ++文件。 在这个类中,我只有一个返回整数值的函数。

int myFunction()
{
    int number = 10;
    return number;
}

此类的标头文件

int myFunction();

我创建一个新项目并加载这个.so文件并在C ++类中调用myfunction()。像这样 这是一个名为“newAndroidNdk”的新类。

void newFunction()
{
    int str = myFunction();

    printf("%s", str);  
}

问题是当我使用ndk-build命令编译这个项目时,它会给我这个错误 “对myfunction的未定义引用”。

这是jni中的Android.mk - > lib文件夹

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libndkfunction-prebuilt
LOCAL_SRC_FILES := libndkfunction.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

这是新项目Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := ndkfun
LOCAL_SRC_FILES := ndkfun.c

LOCAL_SHARED_LIBRARIES := libndkfunction-prebuilt        
 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/jni/include                
include $(BUILD_SHARED_LIBRARY)

帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

您不能直接从java调用本机代码,您需要使用JNI。您可以在官方java站点或Android开发者站点上阅读更多相关信息。你应该使用javah为java代码生成本机函数包装器,它更方便。或者手动声明静态函数并为其C / C ++声明编写包装器 Little tutorial