Android NDK(JNI)详解教程二 JNI 函数、数据类

2023-02-28  本文已影响0人  Kael_Zhang的安卓笔记

JNI 函数

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_sample_projectname_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

JNI 数据类型

在调用JNI方法将实参传递给C/C++函数的时候,会自动将java形参的数据类型自动转换成C/C++相应的数据类型,所以我们在写JNI程序的时候,必须要明白它们之间数据类型的对应关系
1.基本数据类型

Java Type Native Type C/C++ Type Description
boolean jboolean unsigned char unsigned 8 bits
byte jbyte signed char signed 8 bits
char jchar unsigned short unsigned 16 bits
short jshort signed short signed 16 bits
int jint signed int signed 32 bits
long jlong signed long signed 64 bits
float jfloat float 32 bits
double jdouble double 64 bits

2.引用类型

Java Type Native type
all object jobject
java.lang.Class instances jstring
arrays jarray
Object[] jobjectArray
boolean[] jbooleanArray
byte[] jbyteArray
char[] jcharArray
int[] jintArray
long[] jlongArray
float[] jfloatAyyay
double[] jdoubleArray
java.lang.Throwable Objects jthrowable

描述符

  1. 类描述符用来表示一个类或者接口的名字。
  2. 把类或者接口在java中所定义的完整名称中的"."替换成"/"就是类描述符,比如:java.lang.String的类描述符为 java/lang/string
    3.数组类的描述符:在"["后面跟着数组元素的类型的字段描述符,比如:"int[]"的类描述符为 "[I";"double[][][]"的类描述符为:"[[[D" ,一个 "[" 代表一维
Java Type Native type
boolean Z
byte B
char C
short S
int I
long J
float F
double D

引用类型的字段描述符的第一个字符是"L",接着写类描述符,最后以";"结尾,L 和 ";" 必不可少!数组类型的字段描述符的定义规则和数组类描述符一致

Java Type Native type
String "Ljava/lang/String;"
int[] "[I"
Object[] "[Ljava/lang/Object;"
Java Type Native type
String f(); "()Ljava/lang/String;"
long f(int i, Class c); "(ILjava/lang/Class;)J"
String(byte[] bytes); "([B)V"

函数理解

上一篇 下一篇

猜你喜欢

热点阅读