JNI 小试牛刀

  最近在学习语音编解码,但语音编解码库用的是 C/C++ 写的,所以不得不接触了一下 JNI 。对于 JNI 最大的感触就是门槛巨高,用 AndroidStudio 开发的资料非常少,感觉找不到路,还曾幻想出现一个如玄幻小说主人公一样有个名师在身边指导下,呵呵。走了很多弯路,看了很多博客,最终在找到了很多资料 (发现资料都挺新的) ,才写出了个 HelloWord,但还蛮开心的。

JNI 和 NDK

  • JNI (Java Native Interface) 是一套编程接口,用来实现 Java 代码和其他语言 (c/c++) 进行交互。JNI 是 Java 语言的特性 (即 Java 接入 c/c++ 的一套方法),与 Android 没有关系。在 Windows 下面用 Java 做开发也经常会用到 JNI ,例如读写系统注册表。

  • NDK (Native Development Kit) 是 Google 提供的一套工具集,可以让你在 AndroidStudio 上编译其他语言 (c/c++) 。并且 NDK 可以编译多平台的动态库 (.so 文件)。

为啥要有 JNI

因为 C/C++ 语言编译后的文件可以直接在本地系统中运行,而 Java 文件编译后生成的是字节码文件,需要依赖 Java 虚拟机来运行,C/C++ 运行效率高。另一方面,字节码文件很容易被反编译,不安全。而且,硬件相关驱动、许多知名的音视频编码库 (例如 slik/G729) 也是 C/C++ 编写的。Java 程序想要执行高性能的代码、想要高安全性或者需要调用系统驱动和重用已有的音视频解码库,那么就不得不使用 JNI 了。

用 JNI 写个 HelloWord

Android Studio NDK开发-环境配置

使用Android Studio 进行NDK开发和调试

Create hello-JNI with android

如何优雅地使用NDK

AndroidStudio NDK开发最佳入门实践

javah
$JDKPath$/bin/javah
-encoding UTF-8 -d ../jni -jni $FileClass$
$SourcepathEntry$..\java

ndk-build
F:\android-sdk\ndk-bundle\build\ndk-build.cmd
$ModuleFileDir$\src\main

ndk-build clean
F:\android-sdk\ndk-bundle\build\ndk-build.cmd
clean
$ModuleFileDir$\src\main

你可能感兴趣的:(JNI 小试牛刀)