最近开发项目用到了多个C语言编写的动态连接库so,期间遇到不少问题,项目开发完毕后,我以为有必要把开发中的一些知识点总结下来,并结合我手边的一本经典教程《Pro
Android C++ with the NDK》,写下这个系列的文章,分享给你们,但愿给想入门Android NDK开发的朋友带来帮助。shell
Android NDK(Native Development Kit )是一套工具集合,容许你用像C/C++语言那样实现应用程序的一部分。同时,Android NDK对于Android SDK只是个组件,它能够帮咱们生成的JNI兼容的共享库能够在大于Android1.5平台的ARM CPU上运行,将生成的共享库拷贝到合适的程序工程路径的位置上,以保证它们自动的添加到你的apk包中。数据库
Google仅在极少数状况下建议使用NDK,有以下使用场景:
● 必须提升性能(例如,对大量数据进行排序)。
● 使用第三方库。举例说明:许多第三方库由C/C++语言编写,而Android应用程序须要使用现有的第三方库,如Ffmpeg、OpenCV这样的库。
● 底层程序设计(例如,应用程序不依赖Dalvik Java虚拟机)。编程
1.运行效率高
2.利于充分发挥软硬件优点
3.利于代码复用
4.下降版本控制成本
5.下降开发成本分布式
1.开发难度相对较高
2.调试难度相对较高
3.增长开发团队规模工具
JNI是一种在Java虚拟机控制下执行代码的标准机制。代码被编写成汇编程序或者C/C++程序,并组装为动态库。也就容许了非静态绑定用法。这提供了一个在Java平台上调用C/C++的一种途径,反之亦然。它容许Java类的某些方法原生实现,同时让它们可以像普通Java方法同样被调用和使用。性能
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其余语言的通讯(主要是C&C++)。学习
一、JAVA程序和本地程序使用TCP/IP或者IPC进行交互。 二、当用JAVA程序链接本地数据库时,使用JDBC提供的API。
三、JAVA程序可使用分布式对象技术,如JAVA IDL API。
这些方案的共同点是,JAVA和C处于不一样的线程,或者不一样的机器上。这样,当本地程序崩溃时,不会影响到JAVA程序。ui