前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JNI之路径初探---1

JNI之路径初探---1

作者头像
萬物並作吾以觀復
发布2018-09-13 17:32:53
5730
发布2018-09-13 17:32:53
举报
文章被收录于专栏:指尖下的Android指尖下的Android

首先要明白,什么是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
jni06.png

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档