La seguente è una funzione wrapper JNI che ha due parametri, e restituisce una matrice primitiva di oggetti:
jobjectArray Java_com_gnychis_awmon_Test(JNIEnv* env, jobject thiz);
Dal nome della funzione che hai dato non credo che sia completo, vale a dire, non avete rispettato la convenzione nome della funzione obbligatoria che è:
Avviare la funzione con Java_
Aggiungere il nome del pacchetto settembre creato da _ (undescores), ovvero com_company_awesomeapp. Finora il nome della funzione è composto da: Java_com_company_awesomeapp
Aggiungere il nome della classe Java in cui è stato definito il metodo nativo, seguito dal nome della funzione effettiva. Quindi a questo punto dovremmo avere il seguente nome della funzione: Java_com_company_awesomeapp_MainActivity_Test
Il primo parametro è un puntatore a una struttura di memorizzazione di tutti i puntatori a funzione JNI, vale a dire tutto the predefined functions you have available dopo aver #include <jni.h>
.
Il secondo parametro è un riferimento all'oggetto Java all'interno del quale questo metodo nativo è stato dichiarato in.You can use it to call the other methods of the Java object dalla funzione JNI corrente, cioè chiamata Java metodi istanza dal codice JNI scritto in C o C++.
Se per esempio si ha la seguente classe Java all'interno del file MainActivity.java:
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();
}
Poi, il jobject thiz parametro della funzione JNI sarebbe un riferimento a un oggetto di tipo MainActivity.
"questo" è una parola chiave."thiz" è un nome di variabile legale che può essere usato per "oggetto" questo ". – paulsm4