gny*_*his 13 java-native-interface android android-ndk
我很难找到答案.但是,用于JNI函数调用的"jboject thiz"是什么?例如:
jobjectArray Java_com_gnychis_awmon_Test( JNIEnv* env, jobject thiz ) {
Run Code Online (Sandbox Code Playgroud)
我env
常常用来分配对象,但是我从来没有使用过thiz而且我不确定它是什么用的.仅出于知识目的.
bit*_*tek 18
以下是一个JNI包装函数,它有两个参数,并返回一个原始对象数组:
jobjectArray Java_com_gnychis_awmon_Test( JNIEnv* env, jobject thiz );
Run Code Online (Sandbox Code Playgroud)
从您给出的函数名称我认为它不完整,也就是说,您没有遵守强制函数名称约定,即:
用Java_启动函数
附加由_(不包括)分隔的包名称,即com_company_awesomeapp.到目前为止,函数名称由Java_com_company_awesomeapp组成
将Java类名称附加到已定义本机方法的位置,后跟实际的函数名称.所以在这一点上我们应该有以下函数名:Java_com_company_awesomeapp_MainActivity_Test
第一个参数是指向存储所有JNI函数指针的结构的指针,即您之后可用的所有预定义函数#include <jni.h>
.
第二个参数是对Java对象的引用,其中声明了此本机方法. 您可以使用它从当前JNI函数调用Java 对象的其他方法,即从用C编写的JNI代码调用Java实例方法或C++.
例如,如果您在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();
}
Run Code Online (Sandbox Code Playgroud)
然后,JNI函数的jobject thiz参数将是对MainActivity类型的对象的引用.
归档时间: |
|
查看次数: |
6975 次 |
最近记录: |