Android JNI的初步使用--2 動(dòng)態(tài)加載
對(duì)于JNI的使用光java調(diào)用JNI方法肯定是不夠用的,我們有時(shí)候也需要使用JNI調(diào)用java中的參數(shù)和方法。
一.JNI中非靜態(tài)java對(duì)象的創(chuàng)建,參數(shù)賦值,方法調(diào)用
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.獲取構(gòu)造方法
jmethodID TestInit = env->GetMethodID(Test, "<init>", "()V");
3.創(chuàng)建java對(duì)象
jobject test = env->NewObject(Test, TestInit);
4.獲取到j(luò)ava對(duì)象中的參數(shù)
jfieldID paramStr = env->GetFieldID(Test, "paramStr", "Ljava/lang/String;");
5.修改java對(duì)象中的參數(shù)
std::string hello = "JNI參數(shù)賦值";
env->SetObjectField(dragCrash, paramStr, env->NewStringUTF(hello.c_str()));
6.調(diào)用java對(duì)象中的方法
std::string param2 = "JNI參數(shù)方法賦值";
jmethodID setParamStr = env->GetMethodID(Test, "setParamStr", "(Ljava/lang/String;)Lcom/hao/minovel/jni/Test;");
env->CallObjectMethod(dragCrash,setParamStr,env->NewStringUTF(param.c_str()));
二.JNI中的靜態(tài)方法的調(diào)用和靜態(tài)參數(shù)的賦值
1.調(diào)用靜態(tài)方法
jmethodID setStaicParam = env->GetStaticMethodID(Test, "setStaicParam", "(Ljava/lang/String;)V");
env->CallStaticVoidMethod(Test, setStaicParam, env->NewStringUTF(param.c_str()));
2.給靜態(tài)變量賦值
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()));