javah命令详解

概述:

最近在写c++/c的一个小的项目,需要打成动态库,供java使用。就对java 调用c++/c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成c\c++头文件。

javah命令参数详解

cmd(默认配置jdk path) 执行javah -help 如下图:
javah命令详解_第1张图片

-d 和-o
这两个参数用于设置生成的C\C++头文件的指定,该两参数选项不能同时使用,-d是为中的每个有JNI方法的java类都生成一个头文件,并存放在-d指定的目录中,-o则是生成的所有JNI方法的头文件都放在-o指定的文件中。
-jin
表示用于生成JNI风格的C\C++头文件,默认该参数就是开启的。
-classpath
 使用-classpath后JDK将不再使用CLASSPATH中的类搜索路径,如果-classpath和CLASSPATH都没有设置,则JDK使用当前路径(.)作为类搜索路径。
  推荐使用-classpath来定义JDK要搜索的类路径,而不要使用环境变量CLASSPATH的搜索路径,以减少多个项目同时使用CLASSPATH时存在的潜在冲突。例如应用1要使用a1.0.jar中的类G,应用2要使用 a2.0.jar中的类G,a2.0.jar是a1.0.jar的升级包,当a1.0.jar,a2.0.jar都在CLASSPATH中,JDK搜索到第一个包中的类G时就停止搜索,如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。
-verbose
该参数,将显示javah命令搜索和装置类文件的详细过程。

例子1

新建一个含有native方法的java类:

public class HelloWorld{

    static {

        System.load("D://jni//h//hello//x64//Debug//hello.dll");//载入dll  Connector.dll

        //D:\jni\h\hello\x64\Debug
    }
    public static void main(String args []){

        HelloWorld helloWord = new HelloWorld();
        helloWord.sayHello("nihao");

    }
    public  native void sayHello(String name);

}

切换到HelloWorld.java所在目录,执行javac HelloWorld.java命令 在本目录会生成HelloWorld.class文件
执行javah -o .\myjni -classpath .\ -jni HelloWorld** 会在当前目录生成名字为myjni.h头文件
执行javah -d .\jni -classpath .\ -jni HelloWorld 会在当前目录新建一个jni目录,并在jni目录生成一个HelloWorld.h头文件

javah命令详解_第2张图片
注意一定是在HelloWorld.java所在目录执行以上命令

javah命令详解_第3张图片
例子2:
1、D:\jni\helloWorld目录 创建src目录,并创建com\wei子目录。
2、D:\jni\helloWorld\src\com\wei创建HelloWorld.java Test.java。
HelloWorld.java

package com.wei;
public class HelloWorld {

    public native String getHelloString();
}

Test.java

package com.wei;
public class Test{
    public native String TestJni();
}

3、在D:\jni\HelloWorld目录新建一个src.txt文本描述,和一个myClass空目录,打开cmd命令,并切换到D:\jni\helloWorld目录,执行 javac命令
这里写图片描述
src.txt

src\com\wei\HelloWorld.java
src\com\wei\Test.java

执行命令后会在myClass目录生成com\wei\ HelloWorld.class Test.class
javah命令详解_第4张图片
4、在D:\jni\HelloWorld目录新建一个myClass.txt有关类文本描述,打开cmd命令,并切换到D:\jni\helloWorld目录,执行 javah命令
myClass.txt

com.wei.HelloWorld
com.wei.Test

这里写图片描述
执行命令后会在./jni 目录生成以上两个类的头文件。
javah命令详解_第5张图片

到此我相信大家再也不会为生成jni头文件而不知所措了,下一篇我会整理一下,在android studio上生成头文件的方法。

希望对您有所帮助!

你可能感兴趣的:(java,android,ndk)