开发者社区> android_尋道> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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中,最后运行,如有疑问,欢迎留言。

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

相关文章
0-1背包问题Python 蓝桥杯备战倒计时96天
0-1背包问题Python 蓝桥杯备战倒计时96天
26 0
【从0到1开发一个初级DBMS】(task1)DBMS简述
作为数据库系统的核心和基础,数据库管理系统(Data Base Management System,DBMS)应用广泛。DBMS帮助用户实现对共享数据的高效组织、存储、管理和存取,经过数十年的研究发展,已经成为继操作系统之后最复杂的系统软件。
76 0
【字符串】最长回文子串 ( 动态规划算法 ) ★
【字符串】最长回文子串 ( 动态规划算法 ) ★
36 0
浅析k8s 化的集群稳定架构
浅析 k8s 化的集群稳定架构
83 0
动态规划入门——多重背包与单调优化,从此登堂入室
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 今天是算法与数据结构的第14篇文章,也是动态规划专题的第三篇。 在之前的文章当中,我们介绍了多重背包的二进制拆分的解法。
477 0
js 判断字符串中是否包含某个字符串
本文转载自 简书 乌匠 作者:乌匠 链接:https://www.jianshu.com/p/39f2281dabf4 來源:简书 String对象的方法 方法一: indexOf() (推荐) var str = "123"; console.log(str.indexOf("3") != -1 ); // true indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
3225 0
通过jenkins API去build一个job
背景 查看jenkins的api 直接访问 JENKINS_URL/job/JOB_NAME/api/ 就可以查看jenkins的api build一个job的话,是POST请求 JENKINS_URL/job/JOB_NAME/build 会提示: 这是jenkins的安全策略导致的,需要传递一个crumb    解决方法 有两个方案, 第一种方案: 1.
1766 0
SAP PP 计划外发料与计划内发料在WM层面的差异初探
SAP PP 计划外发料与计划内发料在WM层面的差异初探   Process order header material: HR0072 BOM item materials: ...
1704 0
[原创].NET 业务框架开发实战之七 业务层初步构想
原文:[原创].NET 业务框架开发实战之七 业务层初步构想 .NET 业务框架开发实战之七 业务层初步构想   前言:本篇主要讲述如何把DAL和BLL衔接起来。     本篇议题如下:   1.
858 0
+关注
android_尋道
Android 开发
34
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载