最近的项目比较忙,JNI那边的自学就放下了一个月,没想到这一放,以前的细节就都忘了,放在博客里以后常温习.. 在Eclipse中使用javah ,我是添加一个自定义的builder的,然后一运行builder,生成的jni文件生成了。我把这个builder起名为:Javah_Builder须要注意的点是:
1、这个Builder放在Java_Builder之后,(builder顺序在第四位,在CDTbuilder之前)原因是 javah 是要根据Java_Builder 生成的java的class文件才能生成 jni的接口的。
2、重点是这个Javah_Builder的Arguments ,这几乎是javah的语法,但是不常配的话很容易忘啊,我举自己JniDemo1的例子,把它贴出来:
-verbose
-d ${workspace_loc:/JniDemo1/jni}
-classpath ${workspace_loc:/JniDemo1/bin}
我以前肯定是懂过,但现在完全忘了...一点一点找回来:(待序)
首先我在bash中运行 javah 命令来生成 头文件,我的class文件在 /JniSpace/BubbleJniDemo/bin/com/wzydemo/bubblejnidemo/MainAct.class 这个位置
首先我在bash中进入/JniSpace/BubbleJniDemo/bin ,然后输入 sh ~/general.sh (我的general.sh 放在了这个用户的根文件夹下)
general.sh中的命令是:
${JAVA_HOME}/bin/javah -classpath . com.wzydemo.bubblejnidemo.MainAct
然后,就在 /JniSpace/BubbleJniDemo/bin/ 中生成了com_wzydemo_bubblejnidemo_MainAct.h 文件 ,绝对注意的是-classpath后边的.,前后都有一个空格!
---------
但是我想在这个工程的jni文件夹中生成 刚才这个头文件而不是在bin文件夹中,于是命令修改成
#注意我的命令行 这时仍在/JniSpace/BubbleDemo/bin
${JAVA_HOME}/bin/javah -d jni -classpath . com.wzydemo.bubblejnidemo.Main
于是我在bin文件夹下一级子目录里发现jni文件夹而且有生成的头文件。但是随后我退出bin文件夹 进入到/JniSpace/BubbleJniDemo 之后再运行 general.sh,发现找不到com.wzydemo.bubbledemo.MainAct 类(我本来试图在工程一级子目录下建立jni文件夹即像Android的jni文件夹那个位置似的),期间还有报:Error无法为输出创建目录/JniSpace/BubbleDemo/jni 很无语,看来我只能手动把生成的.h文件 放入到 工程一级子目录中的jni文件夹了。
还是那句话,现实是很骨感的,没有能完全实现自己想实现的功能,但是可以用了。
javah的 -d 即目的文件夹功能,还是不太会用目录
参考:
http://cowboy.1988.blog.163.com/blog/static/75105798201227103213419/
http://blog.knowsky.com/261204.htm
我喜欢这种通俗的方式