Android:JNI 与 NDK到底是什么?

1.JNI介绍

1.1 简介

  • 定义:Java Native Interface,即 Java本地接口

  • 作用: 使得Java与 本地其他类型语言(如C、C++)交互
    即在Java代码 里调用 C、C++等语言的代码 或 C、C++代码调用 Java 代码

  • 特别注意:

    1. JNIJava 调用 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++实现 JavaNative方法
  5. 编译.so库文件
  6. 通过Java命令执行Java程序,最终实现Java调用本地代码

2.NDK介绍

2.1 简介

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

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关系

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值