
这是自己NDK开发得小记录,关于C++层读取java层传来的对象内容。
很简单的一个例子,
1、首先在java层定义了一个类NumList:
public class NumList { public int numOne; public int numTwo; }
2、然后在C++层就可以这样:
extern "C" jint Java_com_hoos_myapplication_MainActivity_test( JNIEnv *env, jobject, jobject mathTest, jint numSum) { //获得jfieldID以及该字段的初始值 jclass cls = env->GetObjectClass(mathTest); //获得Java层该对象实例的类引用,即NumList类引用 // 获得得NumList类的属性id // 假如类内内容是字符串,"I"应该变为"Ljava/lang/String;",其他类型也需要相应更改 jfieldID num1FieldId = env->GetFieldID(cls, "numOne","I"); // 获得该属性的值 jint javaNumOne = env->GetIntField(mathTest , num1FieldId); jfieldID num2FieldId = env->GetFieldID(cls, "numTwo" , "I"); jint javaNumTwo = env->GetIntField(mathTest ,num2FieldId); return javaNumOne + javaNumTwo; }
3、在java层就可以调用C++方法, 传入NumList类对象进去, 该方法就会返回这两个数的和了。