Android系统JNI使用(JAVA调用C语言接口)一
目录
第一篇:Android系统JNI使用(JAVA调用C语言接口)一
什么是JNI
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信主要是C/C++。
从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。
使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。
例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。
JNI的演化
JDK1.0包含了一个本地方法接口,它允许JAVA程序调用C/C++写的程序,许多第三方的程序和JAVA类库。如:java.lang,java.io,java.net等都依赖于本地方法来访问底层系统环境的特征。
不幸的是,JDK1.0中的本地方法有两个主要问题:
1、本地方法想访问C中的结构(structures)一样访问对象中的字段。尽管如此,JVM规范并没有定义对象怎么样在内存中实现。如果一个给定的JVM实现在布局对象时,和本地方法假设的不一样,那你就不得不重新编写本地方法库。
2、因为本地方法可以保持对JVM中对象的直接指针,所以,JDK1.0中的本地方法采用了一种保守的GC策略。
JNI的诞生就是为了解决这两个问题,它可以被所有平台下的JVM支持:
(1)每一个JVM实现方案可以支持大量的本地代码。
(2)开发工具作者不必处理不同的本地方法接口。
(3)本地代码可以运行在不同的JVM上面。
JDK1.1中第一次支持JNI,但是,JDK1.1仍在使用老风格的本地代码来实现JAVA的API。这种情况在JDK1.2下被彻底改变成符合标准的写法。
如何使用JNI
调用顺序:
- 编写带有native声明的方法的java类
- 编译所编写的java类
- 使用javah + java类名生成扩展名为h的头文件
- 将C/C++编写的文件生成动态连接库
Java基本数据类型与C语言基本数据类型的对应
Java Type | JNI Type | C Type | 描述 |
---|---|---|---|
boolean | jboolean | unsigned char | unsigned 8 bits |
byte | jbyte | signed char | signed 8 bits |
char | jchar | unsigned short | unsigned 16 bits |
short | jshort | short | signed 16 bits |
int | jint | long | signed 32 bits |
long | jlong | _int64 | signed 64 bits |
float | jfloa | float | 32 bits |
double | jdouble | double | 64 bits |
通过源码学习,让我们直观的看下源码中是怎么定义的:libnativehelper/include_jni/jni.h
Java对象类型
java对象映射到c++中:
所有的_j开头的类,都是继承于_jobject,这也是Java语言的特别,所有的类都是Object的子类,这些类就是和Java中的类一一对应,只不过名字稍有不同而已。
参考
JNI 学习笔记JNI介绍一天掌握Android JNI本地编程 快速入门JNI 入门教程
http://www.taodudu.cc/news/show-5493149.html
相关文章:
- java调用c传参_JAVA 调用C 语言程序,并且进行传参收结果等操作
- 计算机虚拟网络拨号技术,虚拟技术计算机网络论文
- 【隧道篇 / IPsec】(5.2) ❀ 04. IPsec - 拨号宽带 to 拨号宽带 (策略模式) ❀ FortiGate 防火墙
- 宽带虚拟拨号器(lsd for pppoe) 官方
- 教你解决无法创建虚拟拨号连接的问题
- freebsd8.1 adsl虚拟拨号上网设置
- android点击号码打电话,Android从虚拟号码拨打电话
- VPDN虚拟拨号
- 使用拨号API
- liunx系统下 锐捷使用以及虚拟拨号教程
- # 关于解决路由器ADSL虚拟拨号与路由器动态IP(光纤)上网的问题
- 微信小程序之分类页面功能
- 微信 服务器设计,WeUI 为微信 Web 服务量身设计
- 微信支付的简单使用以及前端的显示
- “光鲜”背后,一个月薪 12000 的北京程序员的真实生活!
- 一个月薪 12000 的北漂程序员的真实生活写照
- Spring注入bean的常用的六种方式
- spring中注入方式
- Spring自动注入原理
- Spring中自动注入的两种方式
- 计算机网络群名,最新唯美群名字大全
- 1.6W字!梳理50道经典计算机网络面试题(收藏版)
- 计算机网络专业土味情话,土味情话大全 女生撩男生的土味情话
- 【网络相关面试问题——八股文篇(上)】
- 计算机网络分层结构—OSI参考模型、TCPI参考模型、五层体系结构
- CentOS网络设置
- 50道经典计算机网络面试题
- 网络通信原理(1)
- 美当周初请失业金人数再升 现货金多头显颓势
- 国际黄金理财有哪些交易优势
Android系统JNI使用(JAVA调用C语言接口)一相关推荐
- android jni java调用c,Android与JNI(一) ---- Java调用C 静态调用
第一.通过eclipse新建一个工程名为HelloJni的android工程,并编译. 第二.右键工程-->Android Tools --> Add Native Support,出现如 ...
- jni的使用---Java调用c语言
百度百科: JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植. [1] 从Java1.1开始,JNI标准成为java平台 ...
- Android系统JNI的实现方式
Android系统JNI的实现方式 All rights reserved JNI(Java Native Interface)定义了一种Java代码调用C或者C++代码等其它代码的方式. 在A ...
- JAVA调用R语言之Rserve(二)
之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...
- java调用siri 语言_如何更改Siri的声音,口音,性别和语言
java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...
- JAVA调用C语言程序
JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...
- window与linux环境下,java调用c语言的方法
windows环境下,java调用c语言的方法 1.环境 C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了 ...
- java调用c语言的动态库,hu-unix下面java调用c语言动态链接库.docx
PAGE / NUMPAGES glddydyzcw HU-unix下面java调用C语言动态链接库我在Hp-unix下面用java JNI怎么调用C语言的动态链接库??System.loadLibr ...
- Java调用 新浪微博API 接口发微博,逐项讲解,绝对清晰
转载自:http://www.myexception.cn/program/1930025.html Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰 最近要做个课程设计,使用微博控制树莓 ...
最新文章
- python解一元二次方程步骤-Python实现求解一元二次方程的方法示例
- linux如何取文件列名,Linux_根据表名和索引获取需要的列名的存储过程,复制代码 代码如下: create proc p - phpStudy...
- MATLAB语言中的关系与逻辑运算
- 说说普通人挣钱的思路
- EP100底层封装-LibCreateSourceFile()函数
- 解决VMware 小度wifi 驱动报错问题 Driver error
- 配置文件中的后缀dev、test和prod是什么意思
- Pr 视频速率与关键帧
- T32 load elf
- python程序设计基础之注释
- Sechunter移动应用隐私合规检测详解
- 【5】天猫精灵开放平台实验—基于天气查询模板创建开发屏显页面技能
- 在线快速提取QQ群成员的QQ号码方法(无需软件操作)
- 一口气笑穿极简印度史,简到崩溃,笑到流泪(一)
- 【测试类型功能点】分析图
- 《期权、期货及其他衍生产品》读书笔记(第五章:确定远期和期货价格)
- 通过串口号获得该串口号对应的设备信息(如设备范例ID等)
- 兼容IE8 addEventListener、removeEventListener 函数
- Epson L4158打印机安装与配置
- M站底部固定悬浮导航代码分享
热门文章
- PS图片做羽化效果banner
- Waves协会成员:Sander de Mooij
- 易语言CEF3获取请求返回的源码
- 【转载】2012年国内薪水最高的IT公司排行榜TOP25
- php repositories,app/Repositories/UserRepository.php · 在你们人类愚蠢世界里流浪的逗比/uping - Gitee.com...
- 如何在一个Latex文档中包含多个bib文件
- 【BIGEMAP一键离线地图服务】
- 计算机字处理表格如何计算,Word字处理表格怎么计算
- 【亚马逊运营】从CVR(订单转化率)如何分析广告效果?
- 分享一套开源的springboot制造执行MES系统源码,带本地部署搭建教程+运行文档