Android Comment appeler une méthode Java à partir du code natif


Exemple

L'interface Java native (JNI) vous permet d'appeler des fonctions Java à partir de code natif. Voici un exemple simple de comment le faire:

Code Java:

package com.example.jniexample;
public class JNITest {
    public static int getAnswer(bool) {
        return 42;
    }
}

Code natif:

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);
}

Signature de la méthode JNI vers le type Java:

Signature JNI Type Java
Z booléen
B octet
C carboniser
S court
je int
J longue
F flotte
double
L classe entièrement qualifiée; classe qualifiée
[type type[]

Donc, pour notre exemple, nous avons utilisé (Z) I - ce qui signifie que la fonction obtient un booléen et renvoie un int.