JNI之路径初探---1-阿里云开发者社区

开发者社区> 开发与运维> 正文

JNI之路径初探---1

简介: 首先要明白,什么是JNI,我们做安卓开发为什么要学习JNI,学习JNI能干嘛? JNI全称Java Native Interface (Java本地接口) 那么这个所谓的Java本地接口到底是干什么的呢? 该图是JNI在JVM中所处的位置 ...

首先要明白,什么是JNI,我们做安卓开发为什么要学习JNI,学习JNI能干嘛?
JNI全称Java Native Interface (Java本地接口)
那么这个所谓的Java本地接口到底是干什么的呢?


该图是JNI在JVM中所处的位置
该图是JNI在安卓中的运用

众所周知,我们在开发中要新建一个线程需要实现Runnable接口或者继承Thread类,但是我们深究过线程的实现原理吗?当你一步步紧跟源码就会发现Java层根本没有线程的实际实现,它不过是一个Native方法,官方对线程的说明“线程是CPU独立运行和独立调度的基本单位”,几乎不用思考你也知道,Java可能和CPU打交道吗?Java不过是一个层,一个比较高级的壳。
那么JNI在安卓中能干嘛呢,它可以让我们在JAVA层通过调用C、C++代码来进行音视频的处理,蓝牙、WIFI等等非常“底层”的东西去高效率的处理。
那么我们现在新建一个Java项目,不是新建一个安卓项目是因为JNI不等同于NDK,NDK包含了JNI。

Java代码

那么接下来我们cmd在命令行下先生成该类的class文件,再javah 包名+类名,如果报错说类找不到或无法编译,请参考我的另一篇博客http://www.jianshu.com/p/2e36c606d2e3
那么生成了.h头文件,也就是JNI文件,我们来用C或C++语言来实现它

jni02.png
jni03.png
jni04.png
![jni06.png](http://upload-images.jianshu.io/upload_images/3027456-7ebb78fc7e26517a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

本篇博客适合有一些C和C++基础的同学学习,C的项目在VS,代码也非常的简单,这里简单讲一下,为什么有的jni文件参数类型是jobject有的是jclass,jobject是代表当前Native方法类的对象,而jclass代表类的class对象,每一个类都是class类的类对象。最后不要忘了把.dll文件的路径加入到环境变量path中,最后运行,如有疑问,欢迎留言。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章