问题
I am having troubles generating the C header file for JNI using javah
.
Here's the script I use while standing in the <project-dir>\bin
directory:
javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar com.test.JniTest
As return I get:
ERROR: Could not find class file for 'com.test.JniTest'.
Even though the class JniTest
certainly is in \com\test
.
What am I doing wrong?
回答1:
You specify the classpath to contain only android.jar
.
You also need to include the location where your classes are stored. In your case it is the current directory, so you need to use .
(separated by ;
on Windows). The invocation should look like this:
javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest
回答2:
If you are on Linux or MAC-OS, use ":"
to separate the directories for classpath
rather than ";"
character: Example:
javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar:. com.test.JniTest
回答3:
You should change the directory to <project-dir>\bin\classes
; then, run the following command:
javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest
I'm using the following command file to generate headers:
jHdr.cmd
on my desktop:
@echo on
SET PLATFORM=android-8
SET ANDROID_SDK_ROOT=C:\Android\android-sdk
SET PRJ_DIR=D:\Workspaces\sqLite\raSQLite
SET CLASS_PKG_PREFIX=ra.sqlite
cd %PRJ_DIR%\bin\classes
javah -classpath %ANDROID_SDK_ROOT%\platforms\%PLATFORM%\android.jar;. %CLASS_PKG_PREFIX%.%~n1
pause
adjust variables to your needs ...
put this file on your desktop, then drag you .java file from eclise to jHdr.cmd
, result is under %PRJ_DIR%\bin\classes directory
来源:https://stackoverflow.com/questions/7635624/android-javah-doesnt-find-my-class