android jni

    今天做一个android应用,需要用到jni。虽然做了几个月的android了,也主要是做应用层,可是jni还没有真正用过,之前看过一点,也已经忘记的差不多,所以走了挺多弯路。

    jni调用过程如下:

第一步:新建一个NDK工程,我的建在:E:\NDK\androidndkr8b\AliPlayer\project目录下,E:\NDK\androidndkr8b是我NDK的安装目录,AliPlayer是我应用的名字,project用来存放Java工程和C\C++代码(后来发现这个工程是建在哪里都没关系的,不一定要在NDK 的安装目录下)。

第二步:Eclipse创建一个新的工程,并且制定创建到第一步也就是E:\NDK\androidndkr8b\AliPlayer\project目录下;

第三步:写Java代码。新建一个类Jni.java,在里面把要用C\C++实现的函数声明出来,如:

          public native int getCInt();

等等;

第四步:将E:\NDK\androidndkr8b\AliPlayer\project下的src\com\nmp\aliplayer\Jni.java 复制到project目录下的bin目录下;

第五步:从命令行进入到E:\NDK\androidndkr8b\AliPlayer\project\bin目录,输入:javac Jni.java命令执行,会生成Jni.class文件。

第六步:将Jni.class文件copy到bin目录下的classes\com\nmp\aliplayer\目录下,将原本目录下的Jni.class覆盖掉。

第七步:将bin目录下的classes目录下的com目录复制到bin目录下。这一步把我搞死了,根据网上和书上的资料,这个com目录应该就直接在bin目录下的:bin\com\nmp\aliplayer\...;可是我的不晓得是不是版本的原因还是什么其他的,com的上一层目录还套了一层classes:bin\classes\com\nmp\aliplayer\...。导致我在bin下执行:

javah -classpath  .  -jni com.nmp.aliplayer.Jni命令的时候总报com.nmp.aliplayer.Jni找不到,把com目录拷出来就好了。执行完javah -classpath  .  -jni com.nmp.aliplayer.Jni命令。

后,在bin目录下会得到com_nmp_android_aliplayer_Jni.h的头文件。

第八步:在android 工程的根目录下创建一个jni文件夹,将第七步生成的头文件拷到里面去,然后新建一个com_nmp_android_aliplayer_Jni.cpp文件,在这个文件里面实现Jni.java

定义的那些native 方法的C\C++实现。

第九步:jni目录下写Android.mk;E:\NDK\androidndkr8b\AliPlayer目录下写Application.mk(Application.mk好像不是必须的)

第十步:启动Cygwin,进到E:\NDK\androidndkr8b\AliPlayer目录下,执行:$NDKROOT/ndk-build命令,其中$NDKROOT是在我的电脑-属性-环境变量里面定义的变量,指向E:\NDK\androidndkr8b,也就是你的NDK安装目录(或者说是ndk-build.cmd的目录?呵呵,一样的)命令执行成功的话就会在eclipse 项目根目录下生成一个libs/arm***/目录了(名字不记得了),千呼万唤始出来,.so就在这个目录下啦。

第十一步:Java中用:System.loadlibrary("your library")就可以加载第十步生成的动态库了。

 

 

很生气的一点是,因为我是要在别人的代码上做修改,一开始以为修改了c\c++的代码,那么生成动态库就要从头执行以上的步骤,后来发现根本没必要,改了代码后,直接Cygwin到你的项目目录下,比如我的项目是存在C:\...\....\AliPlayer\目录下的,Cygwin转到这个目录,直接执行$NDKROOT/ndk-build就可以重新生成.so了。浪费我一下午摸索jni怎么用,不过也好,现在总算搞清楚jni具体怎么搞了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值