JNI和NDK

做者:十岁的小男孩java

QQ:929994365android

心之安处便是吾乡c++

前言ide

  本文试图经过解答如下三个问题来达到学习JNI和NDK的目的。是什么?有什么用?怎么用?文章内容前三节来自下面第一个连接的博主共享,很详细的解答前两个问题,第二个连接是安卓官网的教程,回到了第三个问题即在实际工程中怎么用。第三个连接是极客学院的资料。本文记录本人阅读与开发过程,力求不失原意,但推荐阅读原文。下一篇博文将重点学习native声明的方法在底层c/c++中具体实现。工具

http://www.javashuo.com/article/p-slffgxgu-gc.html学习

https://developer.android.google.cn/studio/projects/add-native-codeui

http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/google

目录spa

1. JNI介绍

1.1 简介

  • 定义:Java Native Interface,即 Java本地接口
  • 做用: 使得Java 与 本地其余类型语言(如C、C++)交互.net

    即在 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并没有直接关系

  • 做用:快速开发CC++的动态库,并自动将so和应用一块儿打包成 APK
    便可经过 NDKAndroid中 使用 JNI与本地代码(如C、C++)交互
  • 应用场景:在Android的场景下 使用JNI

    Android开发的功能须要本地代码(C/C++)实现

  • 特色

示意图

  • 额外注意

示意图

2.2 使用步骤

  1. 配置 Android NDK环境
  2. 建立 Android 项目,并与 NDK进行关联
  3. Android 项目中声明所须要调用的 Native方法
  4. 使用 Android须要交互的本地代码 实如今Android中声明的Native方法

    好比 Android 须要与 C++ 交互,那么就用C++ 实现 JavaNative方法

  5. 经过 ndk - bulid 命令编译产生.so库文件
  6. 编译 Android Studio 工程,从而实现 Android 调用本地代码

3. NDK与JNI关系

示意图

4. 怎么用?

  本节内容的学习是经过阅读安卓官网的教程,本文暂且不赘述,读者自行到官网学习,如下连接:https://developer.android.google.cn/studio/projects/add-native-code

 

相关文章
相关标签/搜索