Android NDK学习笔记

2017-04-18  本文已影响0人  QM

转载地址:https://juejin.im/post/57e522e3c4c971005f5dcb00

引言

最近开发项目用到了多个C语言编写的动态链接库so,期间遇到很多问题,项目开发完毕后,我觉得有必要把开发中的一些知识点总结下来,并结合我手边的一本经典教程《Pro
Android C++ with the NDK》,写下这个系列的文章,分享给大家,希望给想入门Android NDK开发的朋友带来帮助。

什么是 Android NDK?

Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。同时,Android NDK对于Android SDK只是个组件,它可以帮我们生成的JNI兼容的共享库可以在大于Android1.5平台的ARM CPU上运行,将生成的共享库拷贝到合适的程序工程路径的位置上,以保证它们自动的添加到你的apk包中。

何时使用NDK?

Google仅在极少数情况下建议使用NDK,有如下使用场景:

NDK开发有何优点?

  1. 运行效率高
  2. 利于充分发挥软硬件优势
  3. 利于代码复用
  4. 降低版本控制成本
  5. 降低开发成本

NDK开发有何缺点?

  1. 开发难度相对较高
  2. 调试难度相对较高
  3. 增加开发团队规模

Android NDK系统文件的结构如下

什么是JNI?

JNI是一种在Java虚拟机控制下执行代码的标准机制。代码被编写成汇编程序或者C/C++ 程序,并组装为动态库。也就允许了非静态绑定用法。这提供了一个在Java平台上调用C/C++的一种途径,反之亦然。它允许Java类的某些方法原生实现,同时让它们能够像普通Java方法一样被调用和使用。

JNI有什么优势?

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。

何时使用JNI?

  1. JAVA程序和本地程序使用TCP/IP或者IPC进行交互。
  2. 当用JAVA程序连接本地数据库时,使用JDBC提供的API。
  3. JAVA程序可以使用分布式对象技术,如JAVA IDL API。

这些方案的共同点是,JAVA和C处于不同的线程,或者不同的机器上。这样,当本地程序崩溃时,不会影响到JAVA程序。

上一篇 下一篇

猜你喜欢

热点阅读