Java – Use ‘javah’ to generate header files using JNI

Use ‘javah’ to generate header files using JNI… here is a solution to the problem.

Use ‘javah’ to generate header files using JNI

I’m trying to use JNI for an Android app that uses the OpenCV4Android library. I can generate header files without using the opencv library, but I get an error message whenever the class imports anything. I’m assuming it needs to link to the library, but I’m not sure how? I use cygwin on a Windows 8.1 64-bit machine.

Raw output:

$ javah -jni -classpath ./bin/classes -d jni/ com.example.icam.nativeRDE  
Error: Class org.opencv.core.Mat could not be found.

Follow the advice: Android, generate jni Header Files with javah , show error that can’t find org.opencv.core.Mat , I get the following output:

$ 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

I tried:

  • Delete the ‘/’ after ICAM
  • Add nativeRDE after “icam/”
  • Add the nativeRDE.class after “icam/”

Thanks for your help.

Solution

Javah takes a fully qualified class name and classpath.
The class name must contain the full package name.
For example: fullPackageName.className

The classpath is your src folder, not your bin folder
Your classpath must be c\Users\Majid\Documents\OpenCV4Android\iCam\src

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

Related Problems and Solutions