Android,用javah生成jni头文件,显示错误,不能找到org.opencv.core.Mat。

 2023-01-20    304  

问题描述

当我用javah中编译JNI类中的本机方法时,我只是有一个烦人的问题,以生成JNI标头文件.

如果类使用了第三方软件包,例如:org.opencv.core.mat,则javah将显示无法找到org.opencv.core.mat类的错误.

Android,用javah生成jni头文件,显示错误,不能找到org.opencv.core.Mat。

OPENCV示例代码如下:

package org.opencv.samples.fd;

import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;

public class DetectionBasedTracker
{
public DetectionBasedTracker(String cascadeName, int minFaceSize) {
    mNativeObj = nativeCreateObject(cascadeName, minFaceSize);
}

public void start() {
    nativeStart(mNativeObj);
}

public void stop() {
    nativeStop(mNativeObj);
}

public void setMinFaceSize(int size) {
    nativeSetFaceSize(mNativeObj, size);
}

public void detect(Mat imageGray, MatOfRect faces) {
    nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
}

public void release() {
    nativeDestroyObject(mNativeObj);
    mNativeObj = 0;
}

private long mNativeObj = 0;

private static native long nativeCreateObject(String cascadeName, int minFaceSize);
private static native void nativeDestroyObject(long thiz);
private static native void nativeStart(long thiz);
private static native void nativeStop(long thiz);
private static native void nativeSetFaceSize(long thiz, int size);
private static native void nativeDetect(long thiz, long inputImage, long faces);
}

首先,我使用了命令

javah -classpath bin/classes -bootclasspath (the directory of android.jar) -d jni (packageName + ClassName) , shows the error "can't find the org.opencv.core.Mat

然后我将命令修改为

javah - classpath bin/classes - bootclasspath (the dir of android.jar) ; (the dir of the opencv lib jar)  -d jni ..." ", this time it shows error

例外

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class
 name: E:\Computer_Language\Java\soft_android\OpenCV-2.4.3-rc-android-sdk\OpenCV
-2.4.3-rc-android-sdk\sdk\java\bin\opencv library - 2.4.3.jar
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
    at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
    at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
    at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
    at com.sun.tools.javah.Main.main(Main.java:46)

我认为,在-bootclasspath中添加OpenCV Lib的目录是有用的和必要的.错误是因为我只是在-bootclasspath中添加了两个路径,或者格式有问题?

真的很困惑.
请提供一些帮助,谢谢!

推荐答案

这就是我所做的:

1.开机命令行,输入(项目)/bin/class:
2.类型:javah -classpath(opencv4android sdk path)/java/bin/class :(您的项目位置)/bin/class -jni(您的Java类文件,包含本机库接口)

)

在我的项目中.我做到了:

javah -classpath/home/zijun/dev/adt/opencvandroid/sdk/java/bin/class:/home/home/zijun/workspace/lowctm/bin/class -jni com.brainport.loct.loctm.tmatchm.tmatching

在Linux Ubuntu上工作的12.04.02 64bit OS

其他推荐答案

我也遇到了同样的问题,它花了我半天.我只需将distectionbasedtracker.java复制到我的督中.查找org.opencv.core.mat.mat.copying mat.java&Matofrect.java到目录distectionbasedtracker.java的存在只是导致更多的Java类无法找到.我发现这个问题是由Java文件中的import * race引起的.我们很少在定义的本机方法中使用Java类.因此,我剪切了这些Java方法并得到了:

package cn.ntu.tonguefur.nativemethod;
public class DetectionBasedTracker{
private static native long nativeCreateObject(String cascadeName,int minFaceSize);
//Other native methods
private static native void nativeDetect(long thiz,long inputImage,long faces);
}

现在您可以自由使用javah命令生成.h
文件.此后,添加Java方法和您需要的导入软件包.

以上所述是小编给大家介绍的Android,用javah生成jni头文件,显示错误,不能找到org.opencv.core.Mat。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26128.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。