【基于Windows系统】教你如何在Android中使用JN

系统 1632 0
鉴于有些同学想要学习NDK,但在网上很难找到一个讲解比较清楚、按照步骤操作可以比较顺利学会NDK的文章,所以写了此篇教程。
一.准备
需要Android NDK和windows下c、c++代码的编译器cygwin
cygwin下载地址: http://www.cygwin.com/
二.配置
1. 安装cygwin,并配置cygwin的环境变量。
例如:我安装在D盘根目录,那么在环境变量的path中添加:”C:\cytwin\bin;”
如下图所示。



2 . 修改新生成文件夹中的“.bash_profile ”文件,用UE或editplus等文本编辑器打开,在最后增加:
NDK=/cygdrive/d/android-ndk-r9c
export NDK
然后保存关闭。
d/android-ndk-r9c表示ndk在d盘,如果你的ndk放到了其他盘符或路径,例如放到e:\sdk目录中,那么就改为e/sdk/android-ndk-r9c。
3、安装eclipse插件
需要在Eclipse中安装CDT插件,让Eclipse可以编辑和编译C/C++程序。安装方法如下: 打开Eclipse(本教程所用的Eclipse版本为Helios),然后,在菜单中选择“Help”?“Install New Software”,然后输入需要安装的CDT插件的路径,如下图所示:
.开始使用
1.在命令行窗口中进入cygwin目录,执行cygwin.bat
2.进入android-ndk中的samples文件夹里的某个项目文件夹,这里以hello-jni为例
进入文件夹的方式与MS-DOS类似,用cd + 空格 + 盘符+ 路径即可,例子见下图
3.执行$NDK/ndk-build编译

file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/308a08bf3aa24d66a1519afac1d626a7/clipboard.png4.例子编译成功后导入Eclipse中,编译并部署测试如图:

.如何在自己的工程中使用NDK
Android-ndk中的例子大家会编译了,那么在自己现有的工程想要调用本地方法应该怎么做呢?
1.在JAVA代码中声明native方法,

file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/faaba0c0a274401aab8776f89fc3fd75/clipboard.png
2.生成头文件
然后需要生成C或C++的源码,供JAVA调用。
可以按照JNI的命名规则,也可以使用JDK的javah命令来生成,这里推荐使用javah,避免手动编写出现错误不好排查。
javah命令的使用方法见javah命令的帮助

file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/6d96701fe24b44cf97461a506957b75c/clipboard.png这里以我的测试工程为例,编写好native方法后,编译工程,eclipse会在bin目录生成.class文件,在命令行中进入bin目录,执行javah + 包名 + 类名,会在bin目录下生成一个头文件。

file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/5d430e0fc0dc46338350ca7225829978/clipboard.pngfile:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/fc0e806a2acd4b869d565de93ba187d2/clipboard.png
这个文件就是JAVA与本地代码交互的接口了,做C或C++的开发人员针对这个头文件开发。
3. 编写本地方法
在你的工程根目录下创建jni文件夹,并从android-ndk\samples里的hello-jni文件夹中拷贝出一个Android.mk文件,粘贴到jni文件夹中,同时刚才用javah生成的.h头文件拷贝到jni文件夹中。
首先创建一个.c文件,实现头文件中的方法,


file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/3ced7760f824484a846b9056c8229c68/clipboard.png然后编辑Android.mk文件,修改如下两行,第一行修改为你的工程名,第二行修改为你的.c或.cpp文件名
LOCAL_MODULE := EX25_JNI
LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c
4.在java代码中加载so文件
在java代码中用静态块加载so文件,注意把so文件的“lib”和“.so”扩展名去掉。
file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/16a3cc5946fc4b65b72890d8d83d31e0/clipboard.png5.使用本地方法
接下来在java中可以调用本地方法进行测试了。按照前面讲解的方法编译,打包部署测试,截图如下:file:///C:/Users/veaenPC/AppData/Local/YNote/Data/cleverboy@126.com/cd3dfb8947e145caa0d027050cd4397b/clipboard.png

最后附上一个Demo:
这个demo很简单,只会显示用c语言写的返回的字符串

7.png (60.76 KB, 下载次数: 0)

NDK_Test.zip

2.06 MB, 下载次数: 1, 下载积分: e币 -10 元

【基于Windows系统】教你如何在Android中使用JNI以及NDK开发环境搭建


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论