0
点赞
收藏
分享

微信扫一扫

Android:JNI 与 NDK到底是什么?

1.JNI介绍

1.1 简介

  • 定义:​​Java Native Interface​​,即 ​​Java​​本地接口
  • 作用: 使得​​Java​​与 本地其他类型语言(如C、C++)交互
    即在​​Java​​代码 里调用 ​​C、C++​​等语言的代码 或 ​​C、C++​​代码调用 ​​Java​​ 代码
  • 特别注意:
  1. ​JNI​​​是​​Java​​​ 调用​​Native​​ 语言的一种特性
  2. ​JNI​​​ 是属于​​Java​​​ 的,与​​Android​​ 无直接关系

1.2 为什么要有 JNI

  • 背景:实际使用中,​​Java​​ 需要与 本地代码 进行交互
  • 问题:因为​​Java​​​ 具备跨平台的特点,所以​​Java​​ 与 本地代码交互的能力非常弱
  • 解决方案: 采用​​JNI​​​特性 增强​​Java​​ 与 本地代码交互的能力

1.3 实现步骤

  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​​调用本地代码

2.NDK介绍

2.1 简介

  • 定义:​​Native Development Kit​​​,是​​Android​​​的一个工具开发包
    ​​​NDK​​​是属于​​Android​​​ 的,与​​Java​​并无直接关系
  • 作用:快速开发​​C、 C++​​​的动态库,并自动将​​so​​​和应用一起打包成​​APK​​​ 即可通过 ​​NDK​​在 ​​Android​​中 使用​​JNI​​与本地代码​​(如C、C++)​​交互
  • 应用场景:在​​Android​​​的场景下 使用​​JNI​​​ 即 ​​Android​​开发的功能需要本地代码​​(C/C++)​​实现
  • 特点
    Android:JNI 与 NDK到底是什么?_JNI
  • 额外注意
    Android:JNI 与 NDK到底是什么?_本地代码_02

2.2 使用步骤

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

3. NDK与JNI关系

Android:JNI 与 NDK到底是什么?_java_03

4. 具体使用

4.1 Android Studio2.2 以下实现NDK

我用不到不写了

4.2 Android Studio2.2 以上实现NDK

  • 如果你的Android Studio是2.2以上的,那么请采用下述方法
    因为Android Studio2.2以上已经内部集成 NDK,所以只需要在Android Studio内部进行配置就可以,具体可以查看我的另一篇文章:
    ​​​Android Sudio配置NDK​​

​​感谢原作者Carson.Ho​​

举报

相关推荐

0 条评论