`

Android JNI 使用的数据结构JNINativeMethod详解

 
阅读更多
Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数。其中很重要的区别是Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:

 

typedef struct {
const char* name;
const char* signature;
void* fnPtr;
} JNINativeMethod;

 

第一个变量name是Java中函数的名字。

第二个变量signature,用字符串是描述了函数的参数和返回值

第三个变量fnPtr是函数指针,指向C函数。

 

其中比较难以理解的是第二个参数,例如

"()V"

"(II)V"

"(Ljava/lang/String;Ljava/lang/String;)V"

 

实际上这些字符是与函数的参数类型一一对应的。

"()" 中的字符表示参数,后面的则代表返回值。例如"()V" 就表示void Func();

"(II)V" 表示 void Func(int, int);

 

具体的每一个字符的对应关系如下

 

字符 Java类型 C类型

V      void            void
Z       jboolean     boolean
I        jint              int
J       jlong            long
D      jdouble       double
F      jfloat            float
B      jbyte            byte
C      jchar           char
S      jshort          short

 

数组则以"["开始,用两个字符表示

 

[I       jintArray      int[]
[F     jfloatArray    float[]
[B     jbyteArray    byte[]
[C    jcharArray    char[]
[S    jshortArray   short[]
[D    jdoubleArray double[]
[J     jlongArray     long[]
[Z    jbooleanArray boolean[]

 

上面的都是基本类型。如果Java函数的参数是class,则以"L"开头,以";"结尾中间是用"/" 隔开的包及类名。而其对应的C函数名的参数则为jobject. 一个例外是String类,其对应的类为jstring

 

Ljava/lang/String; String jstring
Ljava/net/Socket; Socket jobject

 

如果JAVA函数位于一个嵌入类,则用$作为类名间的分隔符。

例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

 

引文地址:http://hi.baidu.com/zhlg_hzh/blog/item/f0d782081f2f45d963d986f5.html

分享到:
评论

相关推荐

    android jni使用curl进行http请求和文件下载

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++)进行交互。JNI在很多场景下都很有用,比如优化性能、调用系统底层库或者像本例中那样,利用C/C++库来实现特定功能。...

    Android 深入研究JNI详解

    ### Android深入研究JNI详解 #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式...

    Android JNI使用demo

    本教程通过一个简单的"Android JNI使用demo"来讲解如何在Android应用中集成和使用JNI。 1. **JNI基础知识**: - JNI接口定义了一套标准的函数,使得Java代码能够调用本地方法(用C/C++编写),反之亦然。 - 在...

    Android JNI总结

    Android JNI 使用了多种数据结构,例如 JNIEnv、jobject、jstring 等。JNIEnv 是一个指向 JNI 环境的指针,它提供了许多有用的函数来处理 JNI 环境。jobject 是一个 Java 对象的引用,jstring 是一个 Java 字符串的...

    android studio 3.4配置Android -jni 开发基础的教程详解

    Android Studio 3.4 配置 Android-JNI 开发基础教程详解 Android Studio 3.4 配置 Android-JNI 开发基础是 Android 应用程序开发中的一项重要技术,能够帮助开发者更好地编写 Android 应用程序。本文将详细介绍如何...

    android jni获取 Mac地址

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...

    android jni使用libzip读取压缩文件

    在Android环境中,通过JNI调用libzip库可以实现原生层对ZIP文件的操作,这在处理大量数据或者需要高效读取压缩文件的场景下非常有用。 首先,你需要在Android项目的jniLibs目录下添加libzip库的.so文件,确保它们...

    android jni 加密demo

    在这个"android jni 加密demo"中,开发者使用JNI来实现多种加密算法,包括RSA、3DES、AES、MD5以及BASE64,这些都是信息安全领域常用的加密和哈希方法。以下是对这些技术的详细解释: 1. **RSA**:RSA是一种非对称...

    Android JNI串口通讯【实战例子】

    Android JNI串口通讯【实战例子】 学习NDK开发很好的例子,也可以直接用在项目中

    android jni 里面使用NewGlobalRef

    在Android的JNI(Java Native Interface)开发中,`NewGlobalRef`是一个至关重要的函数,它允许我们在本地C/C++代码中创建对Java对象的全局引用。这个知识点涉及到Android应用的跨语言交互,内存管理和生命周期管理。 ...

    android jni使用static变量

    本教程将深入探讨如何在Android JNI中使用静态(static)变量,以实现Java层与原生代码之间的数据共享。 首先,了解JNI的基本概念是必要的。JNI为Java应用程序提供了一个接口,可以调用本地方法(即非Java代码),...

    Android JNI demo

    2. 编译JNI头文件:使用`javah`命令(在Android Studio中通常是自动完成的)生成JNI头文件,这个文件包含了Java本地方法的C/C++原型。例如,`JniDemo.h`。 3. 实现本地方法:在C/C++源文件(如`JniDemo.cpp`)中,...

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    `serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...

    android jni 屏幕截图 NativeScreenCapture

    1. **JNI基础**:JNI是Android平台上的一个接口,它为Java应用程序提供了一个桥梁,使得开发者可以使用C或C++编写部分代码,以提升性能或者利用现有的C/C++库。JNI包括一系列的函数调用,如`JNIEnv`指针,用于在Java...

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

    android jni实用demo

    这个"android jni实用demo"提供了一个很好的学习平台,帮助开发者深入理解如何在Android应用中使用JNI进行跨语言编程。 JNI允许Android应用在Java代码中调用C/C++函数,反之亦然,这对于性能优化、利用硬件加速、接...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    在Android中,使用JNI的第一步是创建一个本地方法声明。在Java代码中,我们需要定义一个native方法,并使用`System.loadLibrary()`加载对应的本地库。例如: ```java public class JniExample { static { System....

    android JNI学习三实例

    在这个"android JNI学习三实例"中,我们将深入探讨如何在Android应用开发中使用JNI。 一、JNI简介 JNI是Java平台的一部分,提供了一套接口,让Java代码能够调用本地(native)代码,同时也允许本地代码调用Java对象...

    Android中JNI实现AES加密源代码

    综上所述,"Android中JNI实现AES加密源代码"涉及的知识点包括Android JNI的使用、AES加密算法的实现、NDK开发环境的配置、C/C++与Java的交互,以及数据安全和性能优化。通过这样的实现,开发者可以在Android应用中...

    android jni 使用object对象

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与本地(C/C++)代码进行交互。...在实践中,理解和掌握JNI和`jobjectArray`的使用对于提升Android应用的灵活性和性能至关重要。

Global site tag (gtag.js) - Google Analytics