java 生成jni_Android中使用javah生成jni头文件的正确方法

相信大家在Android中使用NDK开发时,免不了使用JNI。首先在java中声明native方法,而这些native方法是由c或c++来实现的。为了让java能够找到对应的本地实现方法,就需要建立一个对应关系。当然我们可以自己手工编写,但是太麻烦了,还好jdk中有javah这个工具,来帮助我们自动生成本地头文件。

我刚开始也在网上搜索了一下,按照网上的做法怎么也不成功。主要原因是很多人说的不够清楚,导致经常出现类似下面的错误:

error: cannot access com.example.soundtouchdemo.JNISoundTouch

class file for com.example.soundtouchdemo.JNISoundTouch not found

javadoc: error - Class com.example.soundtouchdemo.JNISoundTouch not found.

Error: No classes were specified on the command line.  Try -help.

经过仔细研究,正确的做法是:

1.   cd到你Android工程的bin/classes目录下

hejinlai_iMac:classes hejinlai$ pwd

/Users/hejinlai/Workspace/Android/SoundTouchDemo/bin/classes

这个是非常关键的,之所以错误,就是因为没有进入到这个目录下。很显然这个目录下面有一目录,这个目录就是你包名的顶级目录,一般来说都是com目录:

hejinlai_iMac:classes hejinlai$ ls -l

total 0

drwxr-xr-x  3 hejinlai  staff  102 Jun 19 11:32 com

2.   然后执行 javah 包名.类名

注意包名一定要完整,用 . 隔开,后面的是类的名字,不带任何后缀。

hejinlai_iMac:classes hejinlai$ javah com.example.soundtouchdemo.JNISoundTouch

hejinlai_iMac:classes hejinlai$ ls -l

total 8

drwxr-xr-x  3 hejinlai  staff   102 Jun 19 11:32 com

-rw-r--r--  1 hejinlai  staff  1918 Jun 19 14:49 com_example_soundtouchdemo_JNISoundTouch.h

hejinlai_iMac:classes hejinlai$

总结:在执行javah的时候,一定要确保在正确的目录下,javah后面的参数要是  包名.类名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值