“([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。一个数组int[],就需要表示为这样"[I"。如果多个数组double[][][]就需要表示为这样 "[[[D"。也就是说每一个方括号开始,就表示一个数组维数。多个方框后面,就是数组 的类型。
如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符串,然后分号“;”结束。
比如"Ljava/lang/String;"就是表示类型String;
"[I"就是表示int[];
"[Ljava/lang/Object;"就是表示Object[]。
JNI方法描述符,主要就是在括号里放置参数,在括号后面放置返回类型,如下:
(参数描述符)返回类型
当一个函数不需要返回参数类型时,就使用”V”来表示。
比如"()Ljava/lang/String;"就是表示String f();
"(ILjava/lang/Class;)J"就是表示long f(int i, Class c);
"([B)V"就是表示void String(byte[] bytes);
Java 类型 |
符号 |
Boolean |
Z |
Byte |
B |
Char |
C |
Short |
S |
Int |
I |
Long |
J |
Float |
F |
Double |
D |
Void |
V |
objects对象 |
以"L"开头,以";"结尾,中间是用"/" 隔开的包及类名。比如:Ljava/lang/String;如果是嵌套类,则用$来表示嵌套。例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z" |
另外数组类型的简写,则用"["加上如表A所示的对应类型的简写形式进行表示就可以了,比如:[I 表示 int [];[L/java/lang/objects;表示Objects[],另外。引用类型(除基本类型的数组外)的标示最后都有个";"
例如:
"()V" 就表示void Func();
"(II)V" 表示 void Func(int, int);
"(Ljava/lang/String;Ljava/lang/String;)I".表示 int Func(String,String)
相关推荐
* Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_jni_Demo_Hello2(JNIEnv *, jobject, jstring); //--------------------------------------------------------------------------- /* ...
env->CallVoidMethod(smsManagerWrapperClass.object(), env->GetMethodID(smsManagerWrapperClass.classInfo(), "sendTextMessage", "(Ljava/lang/String;Ljava/lang/String;)V"), smsRecipient.object(), smsText....
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
* Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_cn_com_util_Jni_convert_1mp3_1mehtod (JNIEnv *env, jobject jot, jstring _path); #ifdef __cplusplus } #endif #...
* Signature: (Ljava/lang/String;I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject, jstring, jint); #ifdef __cplusplus } #endif #endif ``` 实现 ...
jfieldID TELEPHONY_SERVICE = env->GetStaticFieldID(cls_context, "TELEPHONY_SERVICE", "Ljava/lang/String;"); jstring str = (jstring)env->GetStaticObjectField(cls_context, TELEPHONY_SERVICE); jobject...
这个类中定义了一个本地方法`HelloWorld`,并使用`native`关键字标明该方法需要通过JNI来调用本地代码。 ```java public class NativeHello { public native void HelloWorld(String str); static { System....
//----字符串处理 (java中编码为utf-16,android为utf-8),jni不能直接使用string---- private native String passStringReturnString(String string); //--基本类型--- private native int add(int a, ...
jmethodID method = (*env)->GetStaticMethodID(env, clazz, "helloWorld", "()Ljava/lang/String;"); jstring result = (jstring)(*env)->CallStaticObjectMethod(env, clazz, method); const char* resultStr =...
* Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_JniDemo_passString (JNIEnv *, jobject, jstring); /* * Class: JniDemo * Method: passIntArray * Signature: (...
- **JNI接口定义**:JNI定义了一套接口和数据类型,使得Java和本地代码可以互相调用函数。 - **头文件`jni.h`**:C/C++代码中需要包含`jni.h`头文件,该文件包含了所有JNI相关的函数声明和数据类型定义。 - **...
jfieldID myFieldID = (*env)->GetFieldID(env, myClass, "myField", "Ljava/lang/String;"); jstring fieldValue = (*env)->GetObjectField(env, customObject, myFieldID); // 修改字段值 (*env)->SetObjectField...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中尤其重要,特别是在需要利用硬件加速、底层库或者提高性能的应用场景下,开发者会借助C/...
{"getHelloWorld", "()Ljava/lang/String;", (void *) Java_JNIExample_getHelloWorld}, {"add", "(II)I", (void *) Java_JNIExample_add}, {"concatStrings", "(Ljava/lang/String;Ljava/lang/String;)Ljava/...
在标题“JNI 调 C/C++ 参数String”中,我们将探讨如何通过JNI传递Java的String类型参数到C或C++函数,并在本地代码中进行处理。 首先,让我们了解JNI的基本结构。要使用JNI,你需要创建一个Java类,声明一些 ...
- **GetMethodID**:获取Java方法的ID,例如`GetMethodID(env, cls, "toString", "()Ljava/lang/String;");` - **NewObject**:创建一个新的Java对象,例如`env->NewObject(cls, mid);` - **CallVoidMethod/...
jfieldID fieldID = env->GetFieldID(cls, "fieldName", "Ljava/lang/String;"); env->SetObjectField(obj, fieldID, newString); ``` 3. **处理Java数组:** JNI支持各种类型的数组,包括基本类型和引用类型。...
{"readBmp", "(Ljava/lang/String;[CLbmp/view/w_h;)V", (void *)tcxt_readBmp}, // ... }; ``` 其中,`readBmp`是本地方法名,`(Ljava/lang/String;[CLbmp/view/w_h;)V`是方法签名,`tcxt_readBmp`是对应的...
jmethodID onCallbackMethod = env->GetMethodID(callbackClass, "onCallback", "(Ljava/lang/String;)V"); // 创建一个字符串参数 std::string hello = "Hello from JNI!"; jstring jhello = env->...
jmethodID constructor = env->GetMethodID(personClass, "<init>", "(Ljava/lang/String;I)V"); jobjectArray array = env->NewObjectArray(2, personClass, NULL); jstring name1 = env->NewStringUTF("张三")...