我正在尝试使用OpenCV4Android库将JNI用于Android应用程序。我可以在不使用opencv库的情况下生成头文件,但每当类导入任何内容时我都会收到错误。我认为它需要链接到库,但我不知道该怎么做?我在Windows 8.1 64位机器上使用cygwin。
原始输出:
$ javah -jni -classpath ./bin/classes -d jni/ com.example.icam.nativeRDE
Error: Class org.opencv.core.Mat could not be found.
按照以下建议:Android, generate jni Header Files with javah , show error that can't find org.opencv.core.Mat后,我得到以下输出:
$ javah -classpath /cygdrive/c/Users/Majid/Documents/OpenCV4Android/OpenCVLib2.4.8/bin/classes/org/opencv/;/cygdrive/c/Users/Majid/Documents/OpenCV4Android/iCam/bin/classes/com/example/icam/ -jni -d jni/ com.example.icam.nativeRDE
Error: no classes specified
-bash: /cygdrive/c/Users/Majid/Documents/OpenCV4Android/iCam/bin/classes/com/example/icam/: is a directory
我试过了:
感谢您的帮助。
答案 0 :(得分:5)
Javah采用完全限定的类名和类路径。
班级名称必须包含完整的包裹名称
实施例:fullPackageName.className
类路径是你的src文件夹而不是bin文件夹
您的类路径必须是c\Users\Majid\Documents\OpenCV4Android\iCam\src
Javah -jni -classpath
C:\ProjectName\src
com.abc.YourClassName
答案 1 :(得分:4)
***I am using Window 10 and Android Studio 2.1.2.***
假设APP( JNIP我的应用名称)位置为
E:\test\JNIP and you wrote native methods in JniExample.java file
JDK位置
C:\Program Files\Java\jdk1.8.0_51\bin>
JNI文件夹位置
E:\test\JNIP\app\src\main\JNI (where, you want to create header file)
班级位置
E:\test\JNIP\app\build\intermediates\classes\debug\com\example\mpankaj\jnip\JniExample.java
Android.jar位置
C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar
首先在运行命令
之前构建项目
在命令提示符/终端上写入命令以创建.h文件
javah -d (JNI Folder Location) -classpath (JAR Locaion);(class Location)
示例命令使用Command
的上述详细信息 C:/Program Files/Java/jdk1.8.0_51/bin>javah -d E:/test/JNIP/app/src/main/JNI -classpath C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar;E:\test\JNIP\app\build\intermediates\classes\debug com.example.mpankaj.jnip.JniExample
在此之后你会得到像这样的.h文件 com_example_mpankaj_jnip_JniExample.h
答案 2 :(得分:0)
你甚至可以简单地从eclipse执行javah。 我尝试了以下步骤并且他们正在工作我在下面的链接中提到了解决方案http://www.lithiumhead.com/notes/windows_jni
分步指南
HelloWorld.java
package com.lithiumhead.jni;
class HelloWorld {
public native void sayHello();
static {
System.loadLibrary("HelloWorld");
}
public static void main(String[] args) {
HelloWorld h = new HelloWorld();
h.sayHello();
}
}