eclipse上ndk环境的搭建&&so文件的生成&&jni文件的调用

JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性。

NDK是一系列工具的集合 。它提供了一些列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。它集成了交叉编译器,并提供了相应的mk文件隔离CPU,平台,ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

Java通过JNI机制和C/C++沟通的具体步骤

1、编写包含native本地方法的java类
2、通过javah工具生成C/C++语言的头文件
3、使用C/C++语言实现头文件
4、使用交叉编译工具对C/C++本地代码进行编译,最后通过链接生成*.so可执行的C/C++库
5、实际执行Java代码去和本地的C/C++代码互相沟通

NDK安装流程:

在电脑已经配置了安卓环境的前提下,只需要下载NDK(R7以上的版本),这是个压缩包,解压可用。注:在R7之前的版本,必须要安装Cygwin才可使用NDK。从R7开始,Windows版本的NDK提供了一个ndk-build.cmd脚本,可以直接利用这个脚本编译。然后只要为Eclipse Android工程添加一个Builder,就能实现Eclipse的自动编译NDK:

第一次生成so文件的时候,我们先使用NDK的sample下的hello-jni的例子。

1、启动eclipse,通过Create project  from existing source,选择hello-jni的目录,按默认选项创建工程即可;

2、观察hello-jni的工程目录结构,发现根目录下多了一个名叫jni的文件夹,该文件夹下面有两个文件,Android.mk和hello-jni.c。

Android.mk是用来生成so文件的配置文件,我们来看看里面是什么:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

include $(BUILD_SHARED_LIBRARY)表示会生成一个动态链接库,即so文件,生成的库文件名称为lib*.so

LOCAL_MODULE    := hello-jni表示将要生成一个名称为libhello-jni.so的库文件

LOCAL_SRC_FILES := hello-jni.c表示生成库文件的源文件是hello-jni.c

打开hello-jni.c文件,会看到里面有一个函数:

jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

这个函数从根据什么原则生成的呢?是根据src下的HelloJni.java文件中的函数 public native String  stringFromJNI();生成的。命名规则为:

Java_(固定开头)com_example_hellojni(用"_"连接的包名)_HelloJni(类名)_stringFromJNI(函数名)

这个函数的生成可以使用javah的命令:用命令行方式进入工程目录的bin\classes目录下,运行javah com.example.hellojni.HelloJni,就会把所有native的函数都按规则生成在一个名为HelloJni.h的头文件里。

3、新建并配置一个新的Builder

1) 点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program,点击OK;

2) 在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:

Location中需要填入nkd-build.cmd的路径(NDK安装目录下)。

WorkingDiretcoty中需要填入HelloJni的工程根目录。

3) 在【EditConfiguration】中,配置选项卡【Refresh】:

勾选“Refresh resources upon completion”,

勾选“The entire workspace”,

勾选“Recuresively include sub-folders”。

4)在【EditConfiguration】中,配置选项卡【Build Options】:

勾选“After a “Clean””,

勾选“During manual builds”,

勾选“During auto builds”,

勾选“Specify working set of relevant resources”。

点击“Specify Resources…”勾选TestNDK工程的“jni“目录,Finish!

保存设置,点击OK。

4、生成so文件

由于我们勾选了“During auto builds”,所以在工程有所改变的时候,so文件便会自动编译,正确生成以后就能在工程目录下发现多了两个文件夹,文件夹libs\armeabi目录下生成了一个叫libhello-jni.so的文件。至此,使用NDK生成so文件的工作就完成了。

5、so文件的调用

在HelloJni.java文件中有一段代码:

static {
        System.loadLibrary("hello-jni");
    }

使用loadLibrary就可以加载该so文件了,加载的时候不需要写libhello-jni.so,只要写hello-jni就可以了。以上是eclispe+ndk+android的基础开发

下面推荐这篇博客是eclispe +jdk 在简单的java工程中调用c程序:http://blog.csdn.net/zygang1988/article/details/7896071

时间: 2024-10-10 09:11:18

eclipse上ndk环境的搭建&&so文件的生成&&jni文件的调用的相关文章

unbuntu 14.04下NDK环境的搭建以及无法设置NDK路径的解决方案

最近在unbuntu中搭建android环境,在搭建ndk环境的时候遇到了问题,发现最后无法设置NDK的路径. 首先,还是先进行ndk环境的搭建.(已经事先搭建好了JDK环境,需要搭建JDK环境的可以参考JDK环境的搭建) 1.下载需要的NDK,笔者是unbuntu 14.04 64位的版本. 这里推荐一个android中国镜像,由于访问android官网的速度很慢,下载速度....踏得网 使用中国镜像速度就快多了. 选择我们需要的版本进行下载: 这里我下载的是最后一个. 2.直接点击提取把全部

linux+django+apache+mod_wsgi+eclipse+python2.7 环境的搭建

首先,说明下环境: linux:fedora14: IDE:eclipse: python:python2.7 python框架:django web服务器:apache web服务器的python模块:mod_wsgi 写在前面: 之前用的windows下面的xampp,写的php后台,现在想转向linux下面的python,跟以前一样,选择apache和eclipse作为自己的开发工具. eclipse的python配置, 参见之前的博客:http://blog.csdn.net/zy416

Android设备上i-jetty环境的搭建-手机上的web服务器

本文主要跟大家分享如何将一台Android设备打造成一个web服务器使用. 编译i-jetty 1.将源码download下来,http://code.google.com/p/i-jetty/downloads/list 2.解压文件,进入pom.xml所在目录,执行命令:mvncleaninstall,参照(http://code.google.com/p/i-jetty/wiki/BuildInstructions) 执行过程中,出现了异常导致失败,是生成classes.dex时内存溢出的

Eclipse Android开发环境的搭建步骤及注意事项

作者:不完整 Email:[email protected] qq: 915043835 前言 作为一个初学者,在进行Eclipse android开发环境的搭建中耗费了挺长的时间.虽然网上有很多关于开发环境搭建的演示讲解,但是参照这些演示讲解进行操作的过程中还是出现了很多问题.因此,整理自己的开发环境搭建过程,供有需要的小白们共同学习借鉴. 步骤概要 第一步:下载安装JDK. 第二步:配置Windows上JDK的变量环境. 第三步:下载ADT bundle(集成ADT的Eclipse开发环境)

Eclipse上Maven环境配置使用

Eclipse上Maven环境配置使用 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. Maven下载地址: http://maven.apache.org/download.cgi 1.2 配置 Maven 的conf文件夹中配置文件settings.xml.  settings.xml 1.3 修改settings.xml,添加镜像服务器设置:    使用阿里云提供的Maven镜像服务器.

Eclipse的Ndk环境初步开发搭建测试NDK_R10

这玩意就是难,不好弄搞了好几天,感觉还是啥都不懂 不过没关系,选记录一点简单的,以后再研究 首选这些NDK环境,官网上有下下来直接解压就好 eclipse 工具的配置直接上图 1.选吧NDK环境配置到工具中去 (我去上传下面这一批图片都累死我了,图片太大还让我一张一张的剪切) 2.导入官方的hellojni项目 3.修改支持最小的sdk 4.导入成功后 , add  native support 5.编译项目,打包出so文件 6.运行项目,成功显示 7.当打开hello-jni.c文件后发现全线

CentOS上Hadoop环境的搭建与管理

please down load the attachment 编辑日期:2015年9月1日 实验要求:完成Hadoop平台安装部署.测试Hadoop平台功能和性能,记录实验过程,提交实验报告.1)    掌握Hadoop安装过程2)    理解Hadoop工作原理3)    测试Hadoop系统的可扩展性4)    测试Hadoop系统的稳定性一.先决条件确保在集群中的每个节点上都安装所有必需软件:JDK ,ssh,Hadoop (2.6.0).1)JDK,必须安装(版本1.7以上),建议选择

java文件如何生成Jar文件

C:\Documents and Settings\Administrator>h: H:\>cd text4 H:\text4>jar cvf dsdf.jar H:\text4\新建文件夹 到了文件所在的根目录下,然后执行jar命令既可 当然如果是在eclipse中,则更方便,百度..

perl 脚本实现简单搜索修改文件并生成diff文件

在已有代码上修改代码一般要生成diff文件来生成patch,从而porting到相关baseline上. 修改文件较少时可以一个个来生成,但是当修改文件较多时就会很耗费工时,所以就想 写一个脚本来减少工时消耗.你只需要关注coding,而不必担心diff文件的生成. 实现的思想只要是:首先搜索以".orig"结尾的文件(这可以通过vim中设置来自动生成), 然后截断.orig来获得修改后的文件.从而生成已"*.diff"结尾的diff文件也可以成为patch. 当把