AndroidNDKr5windows系统上安装与使用

一、AndroidNDKr5安装

1、cygwin的安装和简单配置

首先到http://www.cygwin.com下载setup.exe,接着建立安装目录,如X:/cygwin(我用的是E:/cygwin,将setup.exe放到此目录。

启动安装:


BEGIN->点击setup.exe:

Android NDK r5 windows系统上安装与使用【1】_第1张图片

Next->选InstallfromInternet(选择在线安装方式):

Android NDK r5 windows系统上安装与使用【1】_第2张图片

Next->填写RootDirectory,如X:/cygwin(选择安装路径):

Android NDK r5 windows系统上安装与使用【1】_第3张图片

Next->填写LocalPackageDirectory,如X:/cygwin/ftp(选择下载文件存放的目录):

Android NDK r5 windows系统上安装与使用【1】_第4张图片

Next->选DirectConnection(选择网络连接方式):

Android NDK r5 windows系统上安装与使用【1】_第5张图片

Next->选一个较快的ftp(选择下载镜像站点):

Android NDK r5 windows系统上安装与使用【1】_第6张图片

Next->(开始下载安装):

Android NDK r5 windows系统上安装与使用【1】_第7张图片


到了关键步骤,如果仅想安装基本系统,直接Next;如果想完全安装,点击All旁边的旋转状图标,将Default切换至Install;如果仅想在命令行下写写程序,则只要将gcc、make等开发工具选上,还有openssh等(一般选择:autoconf2.1automake1.10binutilsgcc-coregcc4-coregdbpcrepcre-develGNUawk);选好后,Next->:

Android NDK r5 windows系统上安装与使用【1】_第8张图片


选择需不需要创建快捷方式。->END

最后启动Cygwin,测试安装是否成功:
  点击快捷方式或X:/cygwin/cygwin.bat打开控制台,如果是域用户,按照提示makepasswd和makegroup即可。

Android NDK r5 windows系统上安装与使用【1】_第9张图片

输入命令检查

Android NDK r5 windows系统上安装与使用【1】_第10张图片

出现以上版本信息则表明make和gcc已经安装成功。

2、AndroidNDKr5windows

首先到官网下载AndroidNDKr5windows

android-ndk-r5直接解压就行了,我的路径是E:/Android_NDK

在home/<你的用户名>/.bash_profile文件中最后添加环境变量:打开E:/cygwin/etc/skel目录,找到.bash_profile文件,拷贝到home/<你的用户名>/(此处为E:/cygwin/home/Administrator)下面,在最后添加环境变量

NDK=/cygdrive/<你的盘符>/

exportNDK

我的:NDK=/cygdrive/E/Android_NDK/android-ndk-r5

exportNDK

其中"NDK"这个名字随便起,因为后面要用经常使用,建议不要太长。

重启cygwin,输入cd$NDK进入对应目录,就成功了。

注意:添加时用UltraEdit打开添加,如果是中文OS使用记事本或者写字板打开编辑后,重新启动Cygwin会报错。可以按照下图方式转换:

Android NDK r5 windows系统上安装与使用【1】_第11张图片

二、JNI实例

1、安装成功后编译NDK中的一个例子命令行:

Android NDK r5 windows系统上安装与使用【1】_第12张图片

编译完成后在E:/Android_NDK/android-ndk-r5/samples/hello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件

2、一个简单的JNI例子

下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。

[java] view plain copy
  1. packagecom.cn.lhq;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassJniTestextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//setContentView(R.layout.main);TextViewtv=newTextView(this);tv.setText(stringFromJNI());setContentView(tv);}publicnativeStringstringFromJNI();static{System.loadLibrary("MyFirstJNI");}}

首先,用Eclipse建立一个ANDROID的工程,命名为MyFirstJNI,工程代码为:

制作生成.so文件:可以通过获取以.h文件获取函数申明。打开命令行,键入cd(这个路径是使用Eclipse建立的工程目录的src的路径,我的是F:/workspace/MyFirstJNI/src),目的是设置工程目录。然后键入:javah-jnicom.cn.lhq.JniTest,结果如果失败,那就是因为没有把MyFirst.class文件拷贝到F:/workspace/MyFirstJNI/src/com/cn/lhq之下,原因是Eclipse的文件管理机制会将.class文件和.java文件分开到不同的目录,解决方法是将F:/workspace/MyFirstJNI/bin/com/cn/lhq的所有.class文件都拷贝到他的目录下面。再次运行javah-jnicom.cn.lhq.JniTest即可。然后就可以看到在F:/workspace/MyFirstJNI/src下多出了一个文件:com_cn_lhq_JniTest.h,通过这个文件,我们就知道了本地接口的函数名,于是我们就根据函数名写一个com_cn_lhq_JniTest.c文件,代码如下:

[cpp] view plain copy
  1. #include<string.h>#include<jni.h>jstringJava_com_cn_lhq_JniTest_stringFromJNI(JNIEnv*env,jobjectthiz){return(*env)->NewStringUTF(env,"HellofromJNI!");}

注意这个函数的参数与用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目录:

Android NDK r5 windows系统上安装与使用【1】_第13张图片

输入$NDK/ndk-build命令,在E:/Android_NDK/android-ndk-r5/samples/MyFirstJNI生成libs文件夹,即生成.so文件:


在eclipse中重新导入生成了.so文件的MyFirstJNI项目,运行效果图如下:

Android NDK r5 windows系统上安装与使用【1】_第14张图片

推荐一份非常好android NDK 入门开发刊物 【eoe特刊】第七期:NDK开发指南.pdf

http://download.csdn.net/source/2182770可以下载到

更多相关文章

  1. Android 导入android源码有错,R.java文件不能自动生成解决方法
  2. Android系统回顾(三):UI之GridLayout布局
  3. android的系统权限定义
  4. Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系
  5. Android dex ,xml 文件反编译方法
  6. android/java 计算大文件的sha1值

随机推荐

  1. 马达 vibrator的android的timed_output实
  2. Android换肤白天/夜间模式的框架
  3. Android(安卓)jni系统变量、函数、接口定
  4. Android(安卓)应用的真正入口 - ZygoteIn
  5. Android使用ADB启动应用程序
  6. LinearLayout 内部控件居中
  7. 使用GDB调试Android(安卓)4.0中的WebKit
  8. 两分钟彻底让你明白Android(安卓)Activit
  9. android两种方式实现发送短信的功能代码
  10. Android动画设置interpolator插值器