以下是一个JNI包装函数,它有两个参数,并返回一个原始对象数组:
jobjectArray Java_com_gnychis_awmon_Test( JNIEnv* env, jobject thiz );
从您给出的函数名称我认为它不完整,也就是说,您没有遵守强制函数名称约定,即:
>用Java_启动函数
>追加由_(不包括)分隔的包名称,即com_company_awesomeapp.到目前为止,函数名称由Java_com_company_awesomeapp组成
>在已定义本机方法的位置附加Java类名称,
后跟实际的函数名称.所以在这一点上我们应该有以下函数名:Java_com_company_awesomeapp_MainActivity_Test
第一个参数是指向存储所有JNI函数指针的结构的指针,即#include< jni.h>之后的所有the predefined functions you have available.
第二个参数是对Java对象的引用,其中已经在当前JNI函数中声明了此本机方法.You can use it to call the other methods of the Java object,即从C或C编写的JNI代码中调用Java实例方法.
例如,如果您在MainActivity.java文件中有以下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();
}
然后,JNI函数的jobject thiz参数将是对MainActivity类型的对象的引用.