目录

第一篇: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

调用顺序:

  1. 编写带有native声明的方法的java类
  2. 编译所编写的java类
  3. 使用javah + java类名生成扩展名为h的头文件
  4. 将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

image.png

Java对象类型

java对象映射到c++中:

所有的_j开头的类,都是继承于_jobject,这也是Java语言的特别,所有的类都是Object的子类,这些类就是和Java中的类一一对应,只不过名字稍有不同而已。

image.png

参考

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语言接口)一相关推荐

  1. android jni java调用c,Android与JNI(一) ---- Java调用C 静态调用

    第一.通过eclipse新建一个工程名为HelloJni的android工程,并编译. 第二.右键工程-->Android Tools --> Add Native Support,出现如 ...

  2. jni的使用---Java调用c语言

    百度百科: JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植. [1] 从Java1.1开始,JNI标准成为java平台 ...

  3. Android系统JNI的实现方式

     Android系统JNI的实现方式 All rights reserved JNI(Java Native Interface)定义了一种Java代码调用C或者C++代码等其它代码的方式. 在A ...

  4. JAVA调用R语言之Rserve(二)

    之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...

  5. java调用siri 语言_如何更改Siri的声音,口音,性别和语言

    java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...

  6. JAVA调用C语言程序

    JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...

  7. window与linux环境下,java调用c语言的方法

    windows环境下,java调用c语言的方法 1.环境 C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了 ...

  8. java调用c语言的动态库,hu-unix下面java调用c语言动态链接库.docx

    PAGE / NUMPAGES glddydyzcw HU-unix下面java调用C语言动态链接库我在Hp-unix下面用java JNI怎么调用C语言的动态链接库??System.loadLibr ...

  9. Java调用 新浪微博API 接口发微博,逐项讲解,绝对清晰

    转载自:http://www.myexception.cn/program/1930025.html Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰 最近要做个课程设计,使用微博控制树莓 ...

最新文章

  1. python解一元二次方程步骤-Python实现求解一元二次方程的方法示例
  2. linux如何取文件列名,Linux_根据表名和索引获取需要的列名的存储过程,复制代码 代码如下: create proc p - phpStudy...
  3. MATLAB语言中的关系与逻辑运算
  4. 说说普通人挣钱的思路
  5. EP100底层封装-LibCreateSourceFile()函数
  6. 解决VMware 小度wifi 驱动报错问题 Driver error
  7. 配置文件中的后缀dev、test和prod是什么意思
  8. Pr 视频速率与关键帧
  9. T32 load elf
  10. python程序设计基础之注释
  11. Sechunter移动应用隐私合规检测详解
  12. 【5】天猫精灵开放平台实验—基于天气查询模板创建开发屏显页面技能
  13. 在线快速提取QQ群成员的QQ号码方法(无需软件操作)
  14. 一口气笑穿极简印度史,简到崩溃,笑到流泪(一)
  15. 【测试类型功能点】分析图
  16. 《期权、期货及其他衍生产品》读书笔记(第五章:确定远期和期货价格)
  17. 通过串口号获得该串口号对应的设备信息(如设备范例ID等)
  18. 兼容IE8 addEventListener、removeEventListener 函数
  19. Epson L4158打印机安装与配置
  20. M站底部固定悬浮导航代码分享

热门文章

  1. PS图片做羽化效果banner
  2. Waves协会成员:Sander de Mooij
  3. 易语言CEF3获取请求返回的源码
  4. 【转载】2012年国内薪水最高的IT公司排行榜TOP25
  5. php repositories,app/Repositories/UserRepository.php · 在你们人类愚蠢世界里流浪的逗比/uping - Gitee.com...
  6. 如何在一个Latex文档中包含多个bib文件
  7. 【BIGEMAP一键离线地图服务】
  8. 计算机字处理表格如何计算,Word字处理表格怎么计算
  9. 【亚马逊运营】从CVR(订单转化率)如何分析广告效果?
  10. 分享一套开源的springboot制造执行MES系统源码,带本地部署搭建教程+运行文档