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文件时去在命令行中去重新敲命令了。
感觉这种方式,去做比较麻烦呢。。接下来去寻找更方便的方法。
- Android NDK开发起步Hello Jni 及NDK开发环境搭建
- Android NDK开发起步Hello Jni
- Android NDK开发起步Hello Jni
- Android NDK+JNI开发环境搭建
- Android jni开发资料--NDK环境搭建
- Android初识JNI-搭建NDK开发环境
- Android jni开发资料--NDK环境搭建
- Android jni开发资料--NDK环境搭建
- Android jni开发--NDK环境搭建
- Android jni开发资料--NDK环境搭建
- Android jni开发资料--NDK环境搭建
- Android jni开发资料--NDK环境搭建
- Android jni开发资料--NDK环境搭建
- Android JNI和NDK学习(01)--搭建NDK开发环境
- android(NDK+JNI)---NDK开发 环境配置
- Android NDK开发环境搭建及案例
- Android 及 NDK开发环境搭建
- Android NDK开发一 NDK环境搭建及cmake简介
- 总结:自动生成网页截图(Screenshot)方法
- iOS中多线程编程
- [C++]LeetCode: 53 Unique Binary Search Trees
- java连接oracle,完全正确却没有数据
- 用Jmdns的注册服务、方法的使用
- Android NDK开发起步Hello Jni 及NDK开发环境搭建
- cocos2d-x多分辨率适配方案:setDesignResolutionSize详解
- 模板:<bits/_Stack.h>
- write drain
- IOS中的本地存储
- 【Android】app开发第一步:用ViewPager和SharedPreferences类设置app的引导界面
- Windows NDK 开发调试遇到问题及解决方
- Type Qualifiers in C and C++
- jquery处理JSON对象