引言
最近在做项目的时候,接触到JNI,想一想自己第一次接触这个东西的时候,还是好久之前,现在既然接触到了,那我就简单的跟大家讲一讲JNI的基本使用方法。
JNI(Java Native Interface):java本地开发接口,JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++),外部的c/c++代码也可以调用java代码。
我们为什么要使用JNI呢,可以从效率和安全性两方面来说:
1. 安全性:java是版解释型语言,很容易比反编译拿到源代码,我们一些加密方面的问题,就可以用JNI来实现,
2. 效率:C/C++是本地语言,比java更高效。
做JNI,我们先的下载Android NDK(Native Development Kit )下载链接:(https://developer.android.google.cn/ndk/downloads/index.html),Android NDK是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。
JNI和NDK的区别:
从工具上说,NDK其实多了一个把.so和.apk打包的工具,而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。
从编译库说,NDK开发C/C++只能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件。
从编写方式说,它们一样。
知识前瞻
Java类型和本地类型的对应关系:
Java类型
本地类型(JNI)
描述
boolean(布尔型)
jboolean
无符号8个比特
byte(字节型)
jbyte
有符号8个比特
char(字符型)
jchar
无符号16个比特
short(短整型)
jshort
有符号16个比特
int(整型)
jint
有符号32个比特
long(长整型)
jlong
有符号64个比特
float(浮点型)
jfloat
32个比特
double(双精度浮点型)
jdouble
64个比特
void(空型)
void
N/A 先就看这么多吧,网上也有很多大神写的博客,写得很好,有时间可以去看看,参考博客:https://blog.csdn.net/yuzhou_zang/article/details/78410632 ,这里我只是教大家如何使用Java与C/C++的互相调用。
实战
在这里我给大家做的例子是Java调用C语言和C语言调用Java来实现加法操作。
二话不说,开干,新建Android工程。XMl界面定义如下:
XML代码
MainActivity代码如下:
public class MainActivity extends AppCompatActivity implements View.OnCl