android jni开发做什么,android – 什么是JNI中的“jobject thiz”,它用...

本文详细介绍了JNI函数的命名规则,强调了函数名称必须以`Java_`开头,跟随包名和类名。举例说明了如何正确命名一个接受两个参数并返回原始对象数组的JNI函数,并解释了参数`JNIEnv* env`和`jobject thiz`的用途。`env`指针用于访问JNI函数,而`thiz`参数是对Java对象的引用,可用于调用该对象的其他方法。示例中展示了如何与Java类`MainActivity`的静态原生方法`Test()`相匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是一个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类型的对象的引用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值