美文网首页
NDK 不得不知的基础概念

NDK 不得不知的基础概念

作者: 毛先森 | 来源:发表于2019-07-05 23:02 被阅读0次
image.png

目录

  • So 文件是什么
  • JNI 是什么
  • ndk-build /CMake 是什么
  • Ndk 可以做什么

so 文件是什么

在一些 Android 项目的工程目录的 jniLib 文件夹中,我们经常可以看到以 .SO 为后缀命名的文件,这是 .cpp/.c 文件通过构建工具生成的动态库文件,这些动态库性能往往高于 Java 代码编写的库,比如著名的音视频库 FFMpeg 和图像处理库 OpenCV.

JNI 是什么

通过搜索引擎查找,JNI 是一个 Java 和 Natvie (也就是 C/C++ )通信的接口,我们都知道 Java 代码通过编译器编译成字节码,运行在虚拟机上(在Android 上为 Davilk 或者 Art 虚拟机),而由 C/C++ 编译出的类机器码是可以直接运行的,不需要虚拟机的,这两种不同的运行机制间必须要一种中间件来协调,就像 220 v 家庭用电需要变压器降压,才能使得家用电器正常运转,这里的 JNI 就起着变压器的作用.

在 Ndk 中,我们需要编写 .cpp/.c 文件并且将其编译成 so 库,然后通过 JNI 来使用 Java 调用 so 文件中的方法,使得这两种运行机制能够互相协调,我猜测 JNI 的调用方式会有一定的性能损耗.

ndk-build /CMake 是什么

这两个工具可以将 cpp/.c 文件编译成 so 文件的,我们在写好代码后需要配置一份脚本文件,Android Studio 通过运行脚本生成我们需要的 So 文件.

ndk- build 是一种古老的构建方式,通常在 Eclipse 时代使用,Android Studio 2.2 后对 CMake 更为友好,记得在威锋实习的时候,老大让我把一份高斯模糊的 .cpp 文件打出 so 文件,就是用的 CMake 构建的,网上的相关文档也是相当齐全.

Ndk 可以做什么

市面上很多主流音视频 App 都大量地使用 NDK 开发,比如抖音/ QQ 音乐等,因为这些功能无法使用 Java 来优雅地实现.

常用的有音频视频处理,图形图像处理,银行卡/身份证识别,数据加密解密等

接下来的几篇博客中,我会尝试编写几个加解密 so 库,方法和步骤也会详细记录下来.

相关文章

网友评论

      本文标题:NDK 不得不知的基础概念

      本文链接:https://www.haomeiwen.com/subject/fsoyhctx.html