Android JNI的初步使用--3 JNI调用java

Android JNI的初步使用--2 动态加载
对于JNI的使用光java调用JNI方法肯定是不够用的,我们有时候也需要使用JNI调用java中的参数和方法。

一.JNI中非静态java对象的创建,参数赋值,方法调用

java中的类方法
public class Test {
    String paramStr;
    static String staticParam;

    public Test setParamStr(String paramStr) {
        this.paramStr += paramStr;
        return this;
    }

    public String getParamStr() {
        return paramStr;
    }

    public static void setStaicParam(String str) {
        staticParam = str;
    }
}
1.获取Class
jclass Test = env->FindClass("com/test/Test");
2.获取构造方法
jmethodID TestInit = env->GetMethodID(Test, "", "()V");
3.创建java对象
 jobject test = env->NewObject(Test, TestInit);
4.获取到java对象中的参数
jfieldID paramStr = env->GetFieldID(Test, "paramStr", "Ljava/lang/String;");
5.修改java对象中的参数
std::string hello = "JNI参数赋值";
env->SetObjectField(dragCrash, paramStr, env->NewStringUTF(hello.c_str()));
6.调用java对象中的方法
std::string param2 = "JNI参数方法赋值";
jmethodID setParamStr = env->GetMethodID(Test, "setParamStr", "(Ljava/lang/String;)Lcom/hao/minovel/jni/Test;");
env->CallObjectMethod(dragCrash,setParamStr,env->NewStringUTF(param.c_str()));

二.JNI中的静态方法的调用和静态参数的赋值

1.调用静态方法
jmethodID setStaicParam = env->GetStaticMethodID(Test, "setStaicParam",  "(Ljava/lang/String;)V");
env->CallStaticVoidMethod(Test, setStaicParam, env->NewStringUTF(param.c_str()));
2.给静态变量赋值
jfieldID staticParam = env->GetStaticFieldID(Test, "staticParam", "Ljava/lang/String;");
env->SetStaticObjectField(Test, staticParam, env->NewStringUTF(param.c_str()));
env->SetObjectField(test, paramStr, env->NewStringUTF(param.c_str()));

你可能感兴趣的:(Android JNI的初步使用--3 JNI调用java)