android - javah找不到我的班级

Kai*_*aan 13 java-native-interface android android-ndk javah

我在使用JNI生成C头文件时遇到了麻烦javah.

这是我站在<project-dir>\bin目录中时使用的脚本:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar com.test.JniTest
Run Code Online (Sandbox Code Playgroud)

作为回报,我得到:

ERROR: Could not find class file for 'com.test.JniTest'.
Run Code Online (Sandbox Code Playgroud)

即使班级JniTest肯定在\com\test.

我究竟做错了什么?

Joa*_*uer 19

您指定 包含的类路径android.jar.

您还需要包含存储类的位置.在您的情况下,它是当前目录,因此您需要使用.(;在Windows上分隔).调用应如下所示:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest
Run Code Online (Sandbox Code Playgroud)


VJ *_*ons 18

如果您使用的是Linux或MAC-OS,请使用":"以分隔目录classpath而不是";"字符:示例:

javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar:. com.test.JniTest
Run Code Online (Sandbox Code Playgroud)


ra.*_*ra. 10

您应该将目录更改为<project-dir>\bin\classes; 然后,运行以下命令:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest
Run Code Online (Sandbox Code Playgroud)


我正在使用以下命令文件生成标题: jHdr.cmd在我的桌面上:

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


根据需要调整变量...
将此文件放在桌面上,然后将.java文件从eclise拖到jHdr.cmd,结果在%PRJ_DIR%\ bin\classes目录下