Android - 在预编译的库中访问本机函数

时间:2013-05-05 23:14:49

标签: android opencv android-ndk static-libraries

我想在Android应用程序中使用原生OpenCV函数getThreshVal_Otsu_8u。我注意到外部OpenCV Java包装器函数调用定义为native的函数,但它们与实际的本机函数名称不同。例如:

Java函数:

double threshold(Mat src, Mat dst, double thresh, double maxval, int type)

Java“native”功能:

private static native double threshold_0(long src_nativeObj, long dst_nativeObj, double thresh, double maxval, int type)

C ++函数:

double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double maxval, int type )

如何制作类似的native Java函数来调用getThreshVal_Otsu_8u?有没有办法避免重建OpenCV库并只是“隧道”到现有的.lib文件中?

1 个答案:

答案 0 :(得分:1)

如果不是这种情况,首先需要设置Android项目才能使用Java Native Interface(this link might help)。

一旦设置完成,原则很简单:

  • 您需要在Java代码中创建Java原生原型(例如public native void yourFunction();
  • 必须在C / C ++文件中定义相应的功能(例如JNIEXPORT void JNICALL Java_your_package_JavaClassName_yourFunction(JNIEnv * env, jobject obj);
  • 您应该能够在C / C ++代码中包含OpenCV库(例如#include <opencv2/core/core.hpp>

您要使用的方法(即getThreshVal_0tsu_8u)将Mat&作为参数并返回一个double,这意味着您需要相应地调整您的jni代码。