java:JNI与NDK的区别

JNI

概念:Java Native Interface,即 Java本地接口
作用:使得 Java 与本地其他类型语言(如C、C++)交互。
属于:JNI 是属于 Java 的,从 jdk1.1 开始 JNI 标准就成为了 java 平台的一部分,它提供的一系列的 API 允许 java 和其他语言进行交互,实现了在java 代码中调用其他语言的函数。

为什么要有 JNI

问题:因为 Java 具备跨平台的特点,所以Java 与 本地代码交互的能力非常弱
解决方案: 采用 JNI特性 增强 Java 与 本地代码交互的能力

如何实现JNI

1、在Java中声明Native方法(即需要调用的本地方法)
2、编译上述 Java源文件javac(得到 .class文件)
3、通过 javah 命令导出JNI的头文件(.h文件)
4、使用 Java需要交互的本地代码 实现在 Java中声明的Native方法(如 Java 需要与 C++ 交互,那么就用C++实现 Java的Native方法)
5、编译.so库文件
6、通过Java命令执行 Java程序,最终实现Java调用本地代码

NDK

定义:Native Development Kit,是 Android的一个工具开发包
作用:快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK,即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互
属于:NDK是属于 Android 的,与Java并无直接关系

步骤

1、配置 Android NDK环境
2、创建 Android 项目,并与 NDK进行关联
3、在 Android 项目中声明所需要调用的 Native方法
4、使用 Android需要交互的本地代码 实现在Android中声明的Native方法
(比如 Android 需要与 C++ 交互,那么就用C++ 实现 Java的Native方法)
5、通过 ndk - bulid 命令编译产生.so库文件
6、编译 Android Studio 工程,从而实现 Android 调用本地代码

NDK与JNI关系

JNI 是实现的目的,NDK 是在 android 中实现 JIN 的手段

参考资料

https://blog.csdn.net/carson_ho/article/details/73250163

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/123309032