http://blog.csdn.net/JavaTiger427/archive/2011/01/04/6115693.aspx
?
Android?NDK?r5?windows系统上安装与使用
?
一、Android?NDK?r5安装
1、cygwin的安装和简单配置
①首先到http://www.cygwin.com下载setup.exe?,接着建立安装目录,如X:\cygwin(我用的是E:\cygwin),将setup.exe放到此目录。
②启动安装:
?
BEGIN->?点击setup.exe:
?
③Next->选Install?from?Internet(选择在线安装方式):
?
④Next->填写Root?Directory,如X:\cygwin(选择安装路径):
?
⑤Next->填写Local?Package?Directory,如X:\cygwin\ftp(选择下载文件存放的目录):
?
⑥Next->选Direct?Connection(选择网络连接方式):
?
⑦Next->选一个较快的ftp(选择下载镜像站点):
?
⑧Next->(开始下载安装):
⑨到了关键步骤,如果仅想安装基本系统,直接Next;如果想完全安装,点击?All旁边的旋转状图标,将Default切换至Install;如果仅想在命令行下写写程序,则只要将gcc、make等开发工具选上,还有openssh等(一般选择:autoconf2.1、automake1.10、binutils、gcc-core、gcc4-core、gdb、pcre、pcre-devel、GNU?awk);选好后,Next->:
⑩选择需不需要创建快捷方式。->END
最后启动Cygwin,测试安装是否成功:
点击快捷方式或X:\cygwin\cygwin.bat打开控制台,如果是域用户,按照提示makepasswd和makegroup即可。
?
输入命令检查
?
出现以上版本信息则表明make?和gcc?已经安装成功。
?
2、Android?NDK?r5?windows
①首先到官网下载Android?NDK?r5?windows
②android-ndk-r5直接解压就行了,我的路径是E:\Android_NDK
③在home\<你的用户名>\.bash_profile?文件中最后添加环境变量:打开E:\cygwin\etc\skel目录,找到.bash_profile?文件,拷贝到home\<你的用户名>\(此处为E:\cygwin\home\Administrator)下面,在最后添加环境变量
NDK=/cygdrive/<你的盘符>/
export?NDK
我的:NDK=/cygdrive/E/Android_NDK/android-ndk-r5
??????export?NDK
其中"NDK"这个名字随便起,因为后面要用经常使用,建议不要太长。
重启cygwin,输入cd?$NDK进入对应目录,就成功了。
注意:添加时用UltraEdit打开添加,如果是中文OS?使用记事本或者写字板打开编辑后,重新启动Cygwin?会报错。可以按照下图方式转换:
?
?
二、JNI实例
1、安装成功后编译NDK中的一个例子命令行:
??
?
编译完成后在E:\Android_NDK\android-ndk-r5\samples\hello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件。
?
2、一个简单的JNI例子
下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。
①首先,用Eclipse建立一个ANDROID的工程,命名为MyFirstJNI,工程代码为:
?
②制作生成.so文件:可以通过获取以.h文件来获取函数申明。打开命令行,键入cd?(这个路径是使用Eclipse建立的工程目录的src的路径,我的是F:\workspace\MyFirstJNI\src),目的是设置工程目录。然后键入:javah?-jni?com.cn.lhq.JniTest,结果如果失败,那就是因为没有把MyFirst.class文件拷贝到F:\workspace\MyFirstJNI\src\com\cn\lhq之下,原因是Eclipse的文件管理机制会将.class文件和.java文件分开到不同的目录,解决方法是将F:\workspace\MyFirstJNI\bin\com\cn\lhq的所有.class文件都拷贝到他的目录下面。再次运行javah?-jni?com.cn.lhq.JniTest即可。然后就可以看到在F:\workspace\MyFirstJNI\src下多出了一个文件:com_cn_lhq_JniTest.h,通过这个文件,我们就知道了本地接口的函数名,于是我们就根据函数名写一个com_cn_lhq_JniTest.c文件,?代码如下:
?
注意:这个函数的参数与用javah生成出来的参数是不同的,这里只是需要函数名而已,因为函数名必须匹配,否则在模拟器上面跑的时候会出错,当然,如果对JNI命名规则熟悉的话可以跳过javah这步,直接写一个.c文件。
写好.c文件之后就开始生成.so文件了,这时候需要用到ANDROID.MK这个文件。于是把Eclipse生成的工程目录剪切,放到NDK目录的samples目录之下?(和示例hello-gl2一样),这个时候模仿hello-gl2文件层次结构,将MyFirstJNI文件也做成那样:在MyFirstJNI文件夹下面新建一个jni文件夹,把com_cn_lhq_JniTest.c剪切到此文件夹中,同时也拷贝一个ANDROID.MK文件到此文件夹,用UltraEdit打开ANDROID.MK文件进行修改,主要修改如下:
LOCAL_MODULE????:=?工程名
LOCAL_SRC_FILES?:=?.c的文件名(包含扩展名)
此例子应改为:
LOCAL_MODULE????:=?MyFirstJNI
LOCAL_SRC_FILES?:=?com_cn_lhq_JniTest.c
然后打开cygwin,进入E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI\jni目录:
???
?
再输入$NDK/ndk-build命令,在E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI生成libs文件夹,即生成.so文件:
?
③在eclipse中重新导入生成了.so文件的MyFirstJNI项目,运行效果图如下:
?
http://cygwin.com/mirrors.html