您的位置:首页 > 移动开发 > Android开发

android jni类型和参数签名

2017-03-02 16:58 405 查看

转载请注明本文出自文韬_武略的博客(http://blog.csdn.net/fwt336/article/details/59540356),请尊重他人的辛勤劳动成果,谢谢!

jni中的签名参数是一个很麻烦的东西,稍不注意,应用就gg了。


1.基本类型



另外:typedef jint jsize;

2.引用类型



3.成员变量描述符





4.方法描述符






5.参数签名.基本格式

(参数1类型标示;参数2类型标示;...参数n类型标示)返回值类型标示。

再来看一个小例子,如表1-2所示:上面列出了一些常用的类型标示。请读者注意,如果Java类型是数组,则标示中会有一个“[”,另外,引用类型(除基本类型的数组外)的标示最后都有一个“;”。

表1-2  函数签名小例子
函数签名
Java函数
“()Ljava/lang/String;”
String f()
“(ILjava/lang/Class;)J”
long f(int i, Class c)
“([B)V”
void f(byte[] bytes)

6.Demo


package com.victor.hello;

import java.io.Serializable;

public class People implements Serializable {
public int age;
public String name;

public int getAge() {
return age;
}

public void setNameAndAge(String name, int age) {
this.name = name;
this.age = age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public People getInstance() {
return this;
}
}

下面看下一个参数的set方法和get方法:



JNIEXPORT jint JNICALL Java_com_victor_hello_HelloWorld_getPeopleToStr
(JNIEnv *env, jobject clazz, jobject peopleObj)
{
//先找到com/victor/hello/People类在JNI层中对应的jclass实例。
jclass peopleInterface = env->FindClass("com/victor/hello/People");
jmethodID setAgeMethodID = env->GetMethodID(peopleInterface, "setAge", "(I)V");
env->CallIntMethod(peopleObj, setAgeMethodID, 110);
jmethodID getAgeMethodID = env->GetMethodID(peopleInterface, "getAge", "()I");
jint age = env->CallIntMethod(peopleObj, getAgeMethodID);
return age;
}

最后调用方法:

getPeopleToStr(new People());


返回:110

多个参数的调用:

JNIEXPORT void JNICALL Java_com_victor_hello_HelloWorld_setPeopleParams
(JNIEnv *env, jobject clazz, jobject clientObj, jstring name, jint age)
{
jclass peopleInterface = env->FindClass("com/victor/hello/People");
jmethodID setAgeMethodID = env->GetMethodID(peopleInterface, "setNameAndAge", "(Ljava/lang/String;I)V");
env->CallIntMethod(clientObj, setAgeMethodID, name, age);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni类型 jni签名