Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调

本文详细介绍了Android NDK开发中的JNI数据类型,包括基本数据类型与Java的映射关系,以及如何在C/C++与Java之间进行互调。通过JNI关键字和函数原型解析,阐述了Java调用C/C++本地函数的过程,讲解了字符串处理、访问Java层方法和属性的方法。最后,提供了C/C++访问Java对象、静态属性、方法的示例,并给出了GitHub项目链接供实践参考。
摘要由CSDN通过智能技术生成

Android NDK开发之旅(3):详解JNI数据类型与C/C++、Java之间的互调

(码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/details/72851294)

1. JNI数据类型

      JNI,Java NativeInterface,是一种为Java编写本地方法和JVM嵌入本地应用程序标准的应用程序接口,它允许运行在JVM上的Java代码能够与C/C++实现的本地库进行交互。

(1) JNI数据类型

     Java中有两种类型:基本数据类型(int、float、char等)和引用类型(类、对象、数组等)。JNI定义了一个C/C++类型的集合,集合中每一个类型对应于Java中的每一个类型,其中,对于基本类型而言,JNI与Java之间的映射是一对一的,比如Java中的int类型直接对应于C/C++中的jint;而对引用类型的处理却是不同的,JNI把Java中的对象当作一个C指针传递到本地函数中,这个指针指向JVM中的内部数据结构,而内部数据结构在内存中的存储方式是不可见的,本地代码必须通过在JNIEnv中选择适当的JNI函数来操作JVM中的对象。比如,对于java.lang.String对应的JNI类型是jstring,但本地代码只能通过GetStringUTFChars这样的JNI函数来访问字符串的内容。以下是JNI数据类型映射关系表,通过这种映射JNI就可以正确识别并转换Java数据类型:

  映射

 类型

Java类型

JNI本地类型

C类型

type/bits

type/bits/signatures

type/bits

 

 

 

基本

类型

boolean

8

jboolean

u8

Z

-

 

byte

8

jbyte

8

B

-

 

char

16

jchar

u16

C

char

8

short

16

jshort

16

S

short

16

int

32

jint

32

I

int

32

long

64

jlong

64

J

long

32

float

32

jfloat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值