Das Folgende ist eine JNI-Wrapper-Funktion, die zwei Parameter hat, und gibt eine primitive Array von Objekten:
jobjectArray Java_com_gnychis_awmon_Test(JNIEnv* env, jobject thiz);
Aus dem Funktionsnamen Sie gegeben haben Ich glaube nicht, es abgeschlossen ist, das heißt, Sie haben nicht die obligatorische Funktion Namenskonvention respektiert die lautet:
Starten Sie die Funktion mit java_
September
Fügen Sie den Paketnamen arated by _ (undescores), d. h. com_company_awesomeapp. Bisher besteht der Funktionsname aus: Java_com_company_awesomeapp
Fügen Sie den Namen der Java-Klasse, wo die native Methode definiert wurde, , gefolgt von der tatsächlichen Funktionsname. Deshalb an dieser Stelle sollten wir die folgenden Funktionsnamen haben: Java_com_company_awesomeapp_MainActivity_Test
Der erste Parameter ist ein Zeiger auf eine Struktur alle JNI Funktionszeiger zu speichern, das heißt alle the predefined functions you have available nach #include <jni.h>
.
Der zweite Parameter ist eine Referenz auf das Java-Objekt in dem diese native Methode in erklärt wurde.You can use it to call the other methods of the Java object von der aktuellen JNI-Funktion, das heißt Anruf Java Instanzmethoden von JNI Code in C oder C++ geschrieben.
Wenn zum Beispiel haben Sie die folgende Java-Klasse in der MainActivity.java Datei:
public class MainActivity extends Activity
{
static
{
try
{
System.loadLibrary("mynativelib");
}
catch (UnsatisfiedLinkError ule)
{
Log.e(TAG, "WARNING: Could not load native library: " + ule.getMessage());
}
}
public static native Object[] Test();
}
Dann wird der jobject thiz Parameter der JNI-Funktion wäre ein Verweis auf ein Objekt vom Typ MainActivity sein.
"dies" ist ein Schlüsselwort."thiz" ist ein zulässiger Variablenname, der für "object" verwendet werden kann. " – paulsm4