Android NDK开发起步Hello Jni 及NDK开发环境搭建

来源:互联网 发布:起凡刷通宝软件 编辑:程序博客网 时间:2024/05/01 19:34

这两天又要在andorid下去写客户端的解码程序了,因此必须用到FFmpeg的移植,必须要明白NDK和jni。初学。把开发环境的配置过程记下来,以后留用。

0. NDK介绍及与JNI区别

先说下NDK的作用:

      NDK(Native Development Kit),即本地开发工具,简单地说,就是在开发android应用程序的时候,在java类中调用native函数,而native函数的接口也是在java类中定义的,但是native函数最终由本地的C/C++代码实现。简单地说,就是在java中调用C/C++函数。至于为什么要用NDK,我总结了一下,大致有以下几方面原因:

        1.提升程序运行效率:众所周知,在处理复杂运算或者对速度、内存要求苛刻的程序中,C/C++比java的效率要高出很多,比如人脸识别、OCR字符识别等图像处理程序,用C/C++实现无疑是首选。

        2.与硬件打交道:java之所以能跨平台,是因为所有的代码都是由JVM(java虚拟机)来解释的,这样就屏蔽了底层硬件体系结构的差异。但是如果我们的程序需要与底层硬件打交道,或者与驱动程序交互,那么就要用C/C++来写代码了。

        3.复用现有的程序:比如你有之前已经用C/C++实现了的程序,想移植到android平台上来,则可以直接通过NDK拿来用,不用再全部改写成java的。

NDK与JINI区别


JNI是Java调用Native机制,是Java语言自己的特性全称为 Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用 JNI是是经常的,比如说读写Windows的注册表。

NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例 代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的 问题,所以Android123推荐初学者学好Java后再学习JNI。
NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。

而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。

如果是做应用开发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?

其他至于实现,java调用本地C/C++函数,及其编写方式,我觉得JNI和NDK没有什么区别。

还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件,比如utils/Log.h

而后者的资源更多,当然NDK正在努力开发中,以便支持更丰富的接口。

1 软件按照,开发环境配置

            需要安装NDK和cygwin。NDK的安装主要是根http://jingyan.baidu.com/article/6b97984d83dfe51ca2b0bf0e.html

注意:包的选择是怎么去选择。

试的时候注意:gcc --version,g++ --version,make --version,gdb --version 是- -。。!!!!

在.bash_profile配置的时候,最后加上的是下图,而不是按照帖子上说的,

 

然后再终端中查看,注意是NDK前面要有$

此时,表示安装正确。我看网上说在R7以上版本可以不用cygwin。但是我现在还没去试,有机会看看。

     而ndk的安装,是直接在官网上下载适合自己的系统的版本即可。请参考http://jingyan.baidu.com/article/3ea51489e7a9bd52e61bbac7.html一定要注意,在按章ndk的时候,文件夹不要带空格。以后装软件,尤其是这种变成软件及开发环境,最好不要以中文或者其他字符命名,一定要以英文对文件夹命名。教训

2 写一个hellojni 

本文主要参照http://my.oschina.net/lifj/blog/177087 。注意的地方:

(1)此文章中写的头文件的生成方式,其实可以不用写头文件。如果不去写头文件的话,那么要将HelloJni.h文件中的函数声明放到HelloJni.c文件里面去。

(2)为了能够在eclipse里面去自己去编译,要右键点击工程,然后android  tools,选择add native support,这样就不用在改变.c或者.cpp文件时去在命令行中去重新敲命令了。

感觉这种方式,去做比较麻烦呢。。接下来去寻找更方便的方法。


0 0
原创粉丝点击