NDK开发小记录 C++读取java层对象内容

时间:2023-03-09 08:33:02
NDK开发小记录  C++读取java层对象内容

这是自己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类对象进去, 该方法就会返回这两个数的和了。