我想做的就是使用 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”,我的类(class)是; “NativeLib.java”,我上面的类路径是正确的。我应该在我的命令窗口中写什么?
最佳答案
Java 更新 >= Java9
自 Java9
以来,命令 javah
已被标记为 deprecation warning
并且从 Java10
开始,它已被从 JDK 中删除,因为它的功能现在包含在 javac
命令中。
因此,为了从 Java9 执行同样的操作,您应该运行:
javac -h 。 NativeLib.java
请注意,我假设您在正确的目录中
除了命令之外的主要区别在于,现在 JNI header 创建的目标是 .java
文件中的源代码,而不是编译后的 .class
-h directory Specifies where to place generated native header files.
When you specify this option, a native header file is generated for each class that contains native methods or that has one or more constants annotated with the java.lang.annotation.Native annotation. If the class is part of a package, then the compiler puts the native header file in a subdirectory that reflects the package name and creates directories as needed.
https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9
关于java - 生成 Java JNI header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312976/