生成Java JNI标头

时间:2012-07-03 14:22:36

标签: java header java-native-interface

我要做的就是使用JDK Javah.exe程序生成JNI头文件,但无论我尝试什么,我都会收到错误消息“错误:无法找到'ddg.ndkTest.NativeLib的类文件'“(其中ddg.ndkTest是命名空间,NativeLib是java类文件)。此外,请注意,为了进一步简化过程,我将整个Android项目复制到Java目录。

我已经尝试了以下命令,其中没有一个有效:

  • javah -jni ddg.ndkTest.NativeLib
  • javah -verbose -jni -classpath \NDKTest\bin\classes ddg.ndkTest.NativeLib
  • C:\Program Files\Java\jdk1.7.0_02\bin>javah.exe -jni -classpath \NDKTest\bin\classes\ ddg.ndkTest.NativeLib

如果打电话给我的包裹; “ddg.ndkTest”,我的班级是; “NativeLib.java”,我上面的类路径是正确的。我应该在命令窗口中写什么?

3 个答案:

答案 0 :(得分:13)

试试这个:

  1. 首先构建课程
  2. 将目录更改为\NDKTest\bin\classes\
  3. 运行javah ddg.ndkTest.NativeLib

答案 1 :(得分:6)

更新java> = Java9

由于Java9命令javah已被deprecation warning标记,并且从Java10开始,它已从JDK中删除,因为其功能现已包含在javac中{1}}命令。

因此,为了在Java9中执行相同操作,您应该运行: javac -h . NativeLib.java

注意我假设您在正确的目录中

除命令之外的主要区别是,现在JNI标头创建的目标是.java文件中的源代码,而不是编译的.class

答案 2 :(得分:2)

javah正在寻找NativeLib.class,而不是源代码。所以你应该把它指向编译类的位置,无论它在哪里。即使不在NDKTest/Bin/Classes,你显然也期望它。