使用'javah'使用JNI生成头文件

use*_*612 3 java java-native-interface android opencv javah

我正在尝试使用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.
Run Code Online (Sandbox Code Playgroud)

按照以下建议:Android,使用javah生成jni头文件,显示无法找到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
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • 在icam之后删除'/'
  • 'icam /'后添加nativeRDE
  • 'icam /'后添加nativeRDE.class

谢谢你的帮助.

小智 5

Javah采用完全限定的类名和类路径.类名必须包含完整的包名.
例如:fullPackageName.className

类路径是你的src文件夹而不是bin文件夹你的classpath必须是 c\Users\Majid\Documents\OpenCV4Android\iCam\src

Javah -jni -classpath C:\ProjectName\src com.abc.YourClassName


Pan*_*iya 5

解决方案:使用“ javah”与JNI生成头文件

         ***I am using Window 10 and Android Studio 2.1.2.***
Run Code Online (Sandbox Code Playgroud)

假设APP(JNIP我的应用名称)的位置是

      E:\test\JNIP and you wrote native methods in JniExample.java file
Run Code Online (Sandbox Code Playgroud)

“ JDK位置”为

   C:\Program Files\Java\jdk1.8.0_51\bin> 
Run Code Online (Sandbox Code Playgroud)

“ JNI文件夹位置”为

    E:\test\JNIP\app\src\main\JNI (where, you want to create header file)
Run Code Online (Sandbox Code Playgroud)

课堂位置现为

 E:\test\JNIP\app\build\intermediates\classes\debug\com\example\mpankaj\jnip\JniExample.java
Run Code Online (Sandbox Code Playgroud)

Android.jar的位置是

C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar
Run Code Online (Sandbox Code Playgroud)

首先运行以下命令,然后再构建项目

在coommand提示符/终端上写入命令以创建.h文件

javah -d (JNI Folder Location) -classpath (JAR Locaion);(class Location)
Run Code Online (Sandbox Code Playgroud)

使用以上命令详细信息的示例命令

   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 
Run Code Online (Sandbox Code Playgroud)

之后,您将获得像 com_example_mpankaj_jnip_JniExample.h 这样的.h文件