如何使用JNI创建本机类?

时间:2017-07-20 08:46:36

标签: java android c++ java-native-interface native

我想用构造函数和一个返回字符串的方法创建C ++类。我的问题是:如何初始化类型对象#34;本地类"在Java中使用C ++构造函数然后从这个Java对象调用本机方法?

1 个答案:

答案 0 :(得分:3)

没有本地班级'在Java;我们有本地方法'它可以是任何Java类的一部分。本机方法实现为extern "C"函数。

简而言之,您可以在Java中创建两种本机方法,例如: createNativeInstancegetNativeString。请注意,您可能需要另一种方法来释放本机实例:

#include <jni.h>

JNIEXPORT
jlong Java_test_createNativeInstance(JNIEnv *, jobject ) {
    return reinterpret_cast<jlong>(new CppClass());
}

JNIEXPORT
jstring Java_test_getNativeString(JNIEnv *env, jobject obj, jlong cppClassPtr) {
    CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
    return env->NewStringUTF(env, pCppClass->getString();
}

JNIEXPORT
void Java_test_releaseNativeInstance(JNIEnv *env, jobject obj, jlong cppClassPtr) {
    CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
    delete pCppClass;
}