Generating header file with JNI using 'javah'

16,948

Solution 1

Solution: Generating header file with JNI using 'javah'

         ***I am using Window 10 and Android Studio 2.1.2.***

Suppose APP (JNIP my app Name) location is

      E:\test\JNIP and you wrote native methods in JniExample.java file

JDK Location is

   C:\Program Files\Java\jdk1.8.0_51\bin> 

JNI Folder Location is

    E:\test\JNIP\app\src\main\JNI (where, you want to create header file)

Class Location is

 E:\test\JNIP\app\build\intermediates\classes\debug\com\example\mpankaj\jnip\JniExample.java

Android.jar location is

C:/Users/mpankaj/AppData/Local/Android/Sdk/platforms/android-23/android.jar

First Build your project before running below command

Write Command on coommand prompt/Terminal for .h file creation

javah -d (JNI Folder Location) -classpath (JAR Locaion);(class Location)

Example Command using above details for 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 

After this you will get .h file like this com_example_mpankaj_jnip_JniExample.h

Solution 2

Javah takes a fully qualified class name, and classpath. Class name must be with full package name.
Ex:fullPackageName.className

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

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

Share:
16,948
user3019612
Author by

user3019612

Updated on June 04, 2022

Comments

  • user3019612
    user3019612 almost 2 years

    I'm trying to use JNI for an Android application using the OpenCV4Android library. I can generate a header file without using the opencv library, but I get an error whenever the class imports anything. I assume it needs to link to the library, but I'm not sure how to do that? I'm using cygwin on a Windows 8.1 64 bit machine.

    original output:

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

    After following advice from: 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've tried:

    • removing '/' after icam
    • adding nativeRDE after 'icam/'
    • adding nativeRDE.class after 'icam/'

    Thanks for any help.

  • Dennis Lu
    Dennis Lu over 7 years