如何从Java / Kotlin的静态方法访问C ++方法。
当我尝试访问它时。我收到此错误。
“不能从静态引用非静态'stringFromJNI()' 上下文”
JNIHelper.kt:
对象JNIHelper {
external fun stringFromJNI(): String
init {
System.loadLibrary("native-lib")
}
}
native-lib.cpp:
extern "C" JNIEXPORT jstring JNICALL
Java_com_my_package_JNIHelper_stringFromJNI( //Test
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
Sample.Java:
private static Data getData(Context context) {
return JNIHelper.stringFromJNI(); //Here i get Compilation error
}
答案 0 :(得分:-1)
与Java中的操作相同:您必须传递对象,然后获取其类,执行“ env-> getDeclaredMethod(object_class,“ method_name”, params )”以获取非静态方法,然后调用它。
在您的情况下,您必须这样做..:
JNIHelper().stringFromJNI()
..因为该方法属于应该实例化的类,或者您必须将“ stringFromJNI()”声明为静态,所以实际上在我的项目中我声明了类似JNI的方法
public native static void methodName();
,仅通过使用Class而不是其Instance即可在任何地方使用它们。