如何从本机代码调用 Java 方法
Java Native Interface(JNI)
允许你从本机代码调用 Java 函数。这是一个如何做到的简单示例:
Java 代码:
package com.example.jniexample;
public class JNITest {
public static int getAnswer(bool) {
return 42;
}
}
原生代码:
int getTheAnswer()
{
// Get JNI environment
JNIEnv *env = JniGetEnv();
// Find the Java class - provide package ('.' replaced to '/') and class name
jclass jniTestClass = env->FindClass("com/example/jniexample/JNITest");
// Find the Java method - provide parameters inside () and return value (see table below for an explanation of how to encode them)
jmethodID getAnswerMethod = env->GetStaticMethodID(jniTestClass, "getAnswer", "(Z)I;");
// Calling the method
return (int)env->CallStaticObjectMethod(jniTestClass, getAnswerMethod, (jboolean)true);
}
Java 类型的 JNI 方法签名:
JNI 签名 | Java 类型 |
---|---|
Z |
布尔 |
B |
字节 |
C |
char |
S |
short |
I |
int |
J |
long |
F |
float |
D |
double |
L fully-qualified-class ; | 完全限定类 |
[type | type[] |
因此,对于我们的示例,我们使用(Z)I - 这意味着函数获取布尔值并返回 int。