Android JNI编程学习笔记——前言
来源:互联网 发布:淘宝店用什么方法推广 编辑:程序博客网 时间:2024/06/05 18:14
在我刚接触Android应用开发时,看到的都是Java写的代码,本来我学的是C++编程,为了学习Android 应用开发,又学习了Java语言,幸好Java和C++很相似,所以学起来难度不是很大,再后来看到网上讨论JNI开发,NDK开发,NDK又是什么东东,google一下,原来Android应用开发 也支持C/C++,虽然有些限制,但是毕竟支持 啊,后来慢慢的学习发现Android应用通过JNI技术开发的应用竟然如此之强大,有很多只用Java语言开发所无法比拟的优势。
我相信还有好多Android程序猿想学习Android JNI编程,但是不知如何下手,因为能找到的关于Android JNI系统开发学习的资料 和 书籍很少。所以特此把我学习JNI的学习过程记录一下,希望能和想学习Android JNI开发的程序猿们一起学习,一起进步。
好了,开始学习了:
首先,什么是JNI?
JNI是Java Native Interface的缩写,中文为Java本地调用。JNI允许Java代码和其它语言编写的代码进行交互。JNI一开始就是为了本地已经编译好的语言,尤其是C和C++而设计的,但是它并不妨碍你使用其它语言,只要调用约定受支持就可以了。(摘自百度百科)
什么是NDK?
NDK是一套允许开发人员使用原生编程语言C/C++ 以及汇编语言 开发Android应用的工具集合,可以帮助开发人员复用C/C++编写的代码(例如ffmpeg, 图像处理算法)。
其次,为何要使用NDK?
概况来说主要分为几种情况:
1.代码复用:NDK可以帮助开发人员利用开源项目,目前大多数的开源项目是用C语言编写的。
2.代码保护:apk的java层很容易被反编译,及时使用了混淆机制,还是能看出很多的蛛丝马迹, 而使用C/C++编写的so库反汇编难度要比java的反编译要难得多。
3.代码移植:目前大多数的嵌入式平台都支持C/C++开发,所以,现在编写的代码以后可以方便的移植到其它平台继续使用。
4.性能优势:在一些情况下C/C++编写的代码运行性能要比Java编写的代码性能高,例如图像处理算法、 游戏引擎 和信号处理等等,但是也要注意Java现在发展的运行性能也很强悍了,有时候不一定比C/C++慢,尤其在Android 4.4中加入的ART模式,并且虚拟机调用C/C++写的代码时也会影响一些 性能,所以不要乱用C/C++开发。Android官网也提示开发人员:The NDK will not benefit most apps. you shuld only use the NDK if it is essential to your app-never because you simply perfer to program in C/C++.(提取了部分语句,没抄全)
5.优化优势:NDK可以帮助开发人员使用一些SDK所无法提供的优化功能,例如ARM的neon优化,neon可加速多媒体和信号处理算法。详情:http://www.arm.com/zh/products/processors/technologies/neon.php
前言就写到这吧,第一次写博客,所以写的很乱,大家先凑活着看,我相信未来会好起来的。
参考资料:https://developer.android.com/tools/sdk/ndk/index.html
http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html
推荐资料:Android C++高级编程--使用NDK 《Pro Android C++ with the NDK》
《Android Native Development Kit Cookbook》
- Android JNI编程学习笔记——前言
- Android编程权威指南(第二版)学习笔记及代码(〇)——前言
- [android学习笔记]学习jni编程
- Java 编程学习笔记-前言
- 学习android前言:爱上编程
- Android JNI编程学习笔记(一)——NDK环境搭建
- Android JNI编程学习笔记(二)——深入了解NDK
- Android 学习笔记(二)前言
- android学习笔记_00 - 前言
- Android JNI编程学习
- Android JNI编程—JNI基础
- [转载] Android JNI编程—JNI基础
- Spring.NET学习笔记——前言
- Programming Clojure学习笔记——前言
- MFC学习笔记——前言
- Python学习笔记——前言
- C语言学习笔记——前言
- android JNI 学习笔记
- OpenCV HaarTraining代码解析(二)cvCreateMTStumpClassifier(建立决策树)
- android中子线程操作UI的问题
- Linux编程—出错处理之assert,abort,exit,atexit,strerror
- #java笔试复习(一)#
- HLG-1126(矩阵乘法+快速幂)
- Android JNI编程学习笔记——前言
- 排序之快速排序
- 美容、餐饮、旅游,有望优惠一条龙
- initAdiPattern和predIntraLumaAng
- ps 径向模糊算法(glsl)
- ZFXEngine开发笔记之Shadow Volume
- RoboCup 2D足球仿真team_logo制作方法
- 数列(sequence) 题解
- DST,蝶形运算