Search code examples
androidlinuxandroid-ndkjava-native-interfacejavah

Using javah on linux


I have a simple class for use on JNI, which i need to export to a header file (.h).

I've read that I need to use the javah command, by going to the src folder of the project, and type:

javah -jni com.main_package.NativeClass 

On windows it works fine, but on my main OS (Linux) it doesn't. It keeps telling that it can't find the class. I've tried to use many combinations of the command and to run it on many possible paths, but it didn't work. I've followed many tutorials and websites (including here) and tried their combinations too.

I even tried using Eclipse's external tool for this, as shown here, but it has also shown the same error.

The error I get looks like this:

error: cannot access com.main_package.NativeClass 
class file for com.main_package.NativeClass  not found
javadoc: error - Class com.main_package.NativeClass  not found.
Error: No classes were specified on the command line.  Try -help.

Can anyone please help me? I really like working on Linux and wouldn't want to switch OS each time i need to use this tool.


Here's the correct answer:

  1. for console , go to the "bin/classes" folder and run the command i've used :

    javah -jni com.main_package.NativeClass

  2. for eclipse , use the link i gave , but instead of ${project_loc}/bin/ use ${project_loc}/bin/classes/ , and then , in the package explorer , go to the NativeClass.java , and run the external tool . the output will be in the same path as of the java file .


Solution

  • You don't go to src folder of the project, but the root of your compiled .class files (where com subfolder exists or is created). javah is looking for compiled class, not your source file. If you just run javac manually, the class file will be in the same location as the original sources. Then the statement "go to src folder" is correct. However if you have a project in Eclipse or you use ant or something, the classes might be in completely different location - depending on how your project is set up. I would guess that the Eclipse projects on your Windows and on your Linux are set up differently.