JNI&NDK开发最佳实践(一):开篇

JNI&NDK是什么?

JNI本意为Java Native Interface(java本地接口),为了方便java代码与C/C++代码之间的交互。
NDK是Android提供的一个工具集,通过NDK可以更加方便的通过JNI来访问本地代码,生成本地动态库等。

为什么要使用JNI&NDK开发?优势在哪?

  • 提高代码的安全性。so库相对于java代码反编译更加困难。
  • 方便使用一些已有的C/C++开源库,而且方便移植一些已有的C/C++实现的动态库。
  • C/C++在某些情形下有更高的执行效率。
    除此之外,Framework、热修复以及时下较为火热的音视频开发,无不充斥着JNI/NDK与C/C++的使用,可以说这是android开发进阶永远也绕不过的一个坎。

实践场景

  • 场景一:已有C/C++代码,需要在java中调用这些C/C++中的方法。
    JNI&NDK开发最佳实践(二):CMake实现调用已有C/C++文件中的本地方法
  • 场景二:已有so库,需要在java中调用so库中的方法。
    JNI&NDK开发最佳实践(三):CMake实现调用已有so库中的本地方法

方案

JNI or NDK?

NDK是Android为了更方便使用JNI而提供的一个工具集,免去了繁琐的命令行操作。这里为大家提供一个JNI与NDK的实例,大家可以很直观的感受到二者在使用上的区别。

Make or CMake?

​CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。从而达到跨平台的目的。Android Studio利用 CMake生成的是ninja,ninja是一个小型的关注速度的构建系统。我们不需要关心ninja的脚本,知道怎么配置cmake就可以了。从而可以看出cmake其实是一个跨平台的支持产出各种不同的构建脚本的一个工具。
CMake的脚本名默认是CMakeLists.txt。

更多JNI&NDK系列文章,参见:
JNI&NDK开发最佳实践(一):开篇
JNI&NDK开发最佳实践(二):CMake实现调用已有C/C++文件中的本地方法
JNI&NDK开发最佳实践(三):CMake实现调用已有so库中的本地方法
JNI&NDK开发最佳实践(四):JNI数据类型及与Java数据类型的映射关系
JNI&NDK开发最佳实践(五):本地方法的静态注册与动态注册
JNI&NDK开发最佳实践(六):JNI实现本地方法时的数据类型转换
JNI&NDK开发最佳实践(七):JNI之本地方法与java互调
JNI&NDK开发最佳实践(八):JNI局部引用、全局引用和弱全局引用
JNI&NDK开发最佳实践(九):调试篇

你可能感兴趣的:(JNI&NDK开发最佳实践(一):开篇)