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 实现步骤
- 在
Java
中声明Native
方法(即需要调用的本地方法) - 编译上述
Java
源文件javac(得到.class
文件) - 通过
javah
命令导出JNI
的头文件(.h
文件) - 使用
Java
需要交互的本地代码 实现在Java
中声明的Native
方法 - 编译
.so
库文件 - 通过
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的关系
- JNI是Java中的接口,用于Java与本地语言的交互;
- NDK是安卓的开发工具包,用于快速开发C、C++的动态库,并和SO文件一起打包成APK;
- JNI是实现的目的,而NDK是安卓中实现JNI的手段。在AndroidStudio中,是通过NDK实现JNI功能的。