如何从本机代码调用 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。