JNI基础知识

Android系统底层的框架大多采用的是C或者C++语言实现的,但是Android上层的框架是采用Java实现的,所以我们平常进行Android也是采用Java语言开发。虽然Android底层采用C或者C++实现,但是我们在进行Android开发的时候,却不能直接调用C或者C++,而是需要采用JNI来调用C或者C++,下面小编就为大家介绍什么是JNI?以及怎么使用JNI来实现调用C或者C++语言。

一、JNI 介绍

1.1 简介

JNI 即 Java Native Interface,通俗的可以理解为Java本地接口。它的作用就是能实现Java与本地其他语言,比如C或者C++进行交互。也就是说可以Java可以通过JNI调用C、C++,同时C、C++也能通过JNI调用Java。

JNI是Java语言中的特性,JNI是属于Java的,与Android其实是没有直接关系的。

1.2 实现步骤

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

1.3 JNI的使用场景

  • 考虑代码安全
    在安卓开发中,Java语言开发的代码往往很容易被反编译,但是C语言写的代码编译之后就成了二进制文件,所以比较难被反编译。在一些比较机密的业务可以采用C语言来编写,然后采用Java通过JNI来调C语言。
  • 考虑执行效率
    一些比较复杂的算法采用java语言实现,可能执行效率比较低,但是如果采用C语言实现,效率可能会更高,因为C语言是更接近底层的语言。所以为了提高执行效率,比如一些视频的处理算法,往往是采用C语言去实现的。在一些比较复杂的算法可以采用C语言来编写,然后采用Java通过JNI来调C语言。

二、NDK介绍

2.1 简介

NDK 即 Native Development Kit ,可以理解为NDK是安卓的一个开发工具包。它的作用是可以快速开发C、C++的动态库,并且自动将SO库和应用一起打包成APK。

NDK是属于安卓的开发工具包,与Java没有直接的关系。

2.2 JNI与NDK的关系

  1. JNI是Java中的接口,用于Java与本地语言的交互;
  2. NDK是安卓的开发工具包,用于快速开发C、C++的动态库,并和SO文件一起打包成APK;
  3. JNI是实现的目的,而NDK是安卓中实现JNI的手段。在AndroidStudio中,是通过NDK实现JNI功能的。