鉴于有些同窗想要学习NDK,但在网上很难找到一个讲解比较清楚、按照步骤操做能够比较顺利学会NDK的文章,因此写了此篇教程。java
一.学习本篇教程须要具有的条件:android
1. 了解JAVA中JNI的概念、好处以及使用方法,网上不少介绍,这里就不重复了。c++
2. 你的电脑配置好了Android应用开发环境,即:JAVA、Eclipse、ADT和Android SDK。windows
二.准备bash
须要Android NDK和windows下c、c++代码的编译器cygwineclipse
android-ndk-r6-windows.zip下载地址:http://u.115.com/file/clvyxr0b编辑器
cygwin下载地址:http://u.115.com/file/clvy46eb学习
三.配置测试
1. 解压缩NDK和cygwin,并配置cygwin的环境变量。ui
例如:我解压缩到D盘根目录,那么在环境变量的path中添加:”D:\cytwin\bin;”,
以下图所示。
2. 在命令行中进入cygwin目录,并执行cygwin.bat,若是你不是用Administrator帐号登陆的系统,那么会在cygwin\home\文件夹中生成一个以你的登陆名命名的新的文件夹。
3. 修改新生成文件夹中的“.bash_profile ”文件,用UE或editplus等文本编辑器打开,在最后增长:
NDK=/cygdrive/d/android-ndk-r6
export NDK
而后保存关闭。
d/android-ndk-r6表示ndk在d盘,若是你的ndk放到了其余盘符或路径,例如放到e:\sdk目录中,那么就改成e/sdk/android-ndk-r6。
(若是是Administrator帐号登陆,直接修改Administrator文件夹中的文件。)
四.开始使用
1.在命令行窗口中进入cygwin目录,执行cygwin.bat
2.进入android-ndk中的samples文件夹里的某个项目文件夹,这里以hello-jni为例
进入文件夹的方式与MS-DOS相似,用cd + 空格 + 盘符+ 路径便可,例子见下图
3.执行$NDK/ndk-build编译
4.例子编译成功后导入Eclipse中,编译并部署测试如图:
五.如何在本身的工程中使用NDK
Android-ndk中的例子你们会编译了,那么在本身现有的工程想要调用本地方法应该怎么作呢?
1.在JAVA代码中声明native方法,
2.生成头文件
而后须要生成C或C++的源码,供JAVA调用。
能够按照JNI的命名规则,也可使用JDK的javah命令来生成,这里推荐使用javah,避免手动编写出现错误很差排查。
javah命令的使用方法见javah命令的帮助
这里以个人测试工程为例,编写好native方法后,编译工程,eclipse会在bin目录生成.class文件,在命令行中进入bin目录,执行javah + 包名 + 类名,会在bin目录下生成一个头文件。
这个文件就是JAVA与本地代码交互的接口了,作C或C++的开发人员针对这个头文件开发。
3. 编写本地方法
在你的工程根目录下建立jni文件夹,并从android-ndk\samples里的hello-jni文件夹中拷贝出一个Android.mk文件,粘贴到jni文件夹中,同时刚才用javah生成的.h头文件拷贝到jni文件夹中。
首先建立一个.c文件,实现头文件中的方法,
而后编辑Android.mk文件,修改以下两行,第一行修改成你的工程名,第二行修改成你的.c或.cpp文件名
LOCAL_MODULE := EX25_JNI
LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c
4.在java代码中加载so文件
在java代码中用静态块加载so文件,注意把so文件的“lib”和“.so”扩展名去掉。
5.使用本地方法
接下来在java中能够调用本地方法进行测试了。按照前面讲解的方法编译,打包部署测试,截图以下: