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(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++)进行交互。JNI在很多场景下都很有用,比如优化性能、调用系统底层库或者像本例中那样,利用C/C++库来实现特定功能。...
### Android深入研究JNI详解 #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式...
本教程通过一个简单的"Android JNI使用demo"来讲解如何在Android应用中集成和使用JNI。 1. **JNI基础知识**: - JNI接口定义了一套标准的函数,使得Java代码能够调用本地方法(用C/C++编写),反之亦然。 - 在...
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 应用程序开发中的一项重要技术,能够帮助开发者更好地编写 Android 应用程序。本文将详细介绍如何...
在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...
在Android环境中,通过JNI调用libzip库可以实现原生层对ZIP文件的操作,这在处理大量数据或者需要高效读取压缩文件的场景下非常有用。 首先,你需要在Android项目的jniLibs目录下添加libzip库的.so文件,确保它们...
在这个"android jni 加密demo"中,开发者使用JNI来实现多种加密算法,包括RSA、3DES、AES、MD5以及BASE64,这些都是信息安全领域常用的加密和哈希方法。以下是对这些技术的详细解释: 1. **RSA**:RSA是一种非对称...
Android JNI串口通讯【实战例子】 学习NDK开发很好的例子,也可以直接用在项目中
在Android的JNI(Java Native Interface)开发中,`NewGlobalRef`是一个至关重要的函数,它允许我们在本地C/C++代码中创建对Java对象的全局引用。这个知识点涉及到Android应用的跨语言交互,内存管理和生命周期管理。 ...
本教程将深入探讨如何在Android JNI中使用静态(static)变量,以实现Java层与原生代码之间的数据共享。 首先,了解JNI的基本概念是必要的。JNI为Java应用程序提供了一个接口,可以调用本地方法(即非Java代码),...
2. 编译JNI头文件:使用`javah`命令(在Android Studio中通常是自动完成的)生成JNI头文件,这个文件包含了Java本地方法的C/C++原型。例如,`JniDemo.h`。 3. 实现本地方法:在C/C++源文件(如`JniDemo.cpp`)中,...
`serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...
1. **JNI基础**:JNI是Android平台上的一个接口,它为Java应用程序提供了一个桥梁,使得开发者可以使用C或C++编写部分代码,以提升性能或者利用现有的C/C++库。JNI包括一系列的函数调用,如`JNIEnv`指针,用于在Java...
本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...
这个"android jni实用demo"提供了一个很好的学习平台,帮助开发者深入理解如何在Android应用中使用JNI进行跨语言编程。 JNI允许Android应用在Java代码中调用C/C++函数,反之亦然,这对于性能优化、利用硬件加速、接...
在Android中,使用JNI的第一步是创建一个本地方法声明。在Java代码中,我们需要定义一个native方法,并使用`System.loadLibrary()`加载对应的本地库。例如: ```java public class JniExample { static { System....
在这个"android JNI学习三实例"中,我们将深入探讨如何在Android应用开发中使用JNI。 一、JNI简介 JNI是Java平台的一部分,提供了一套接口,让Java代码能够调用本地(native)代码,同时也允许本地代码调用Java对象...
综上所述,"Android中JNI实现AES加密源代码"涉及的知识点包括Android JNI的使用、AES加密算法的实现、NDK开发环境的配置、C/C++与Java的交互,以及数据安全和性能优化。通过这样的实现,开发者可以在Android应用中...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与本地(C/C++)代码进行交互。...在实践中,理解和掌握JNI和`jobjectArray`的使用对于提升Android应用的灵活性和性能至关重要。