Android 利用JNI调用Android Java代码函数

本文详细阐述了Java调用JNI的基本步骤,包括声明引用函数、查找方法ID以及函数调用,并通过具体实例展示了如何实现Java与JNI之间的交互。重点介绍了关键函数的作用及其参数意义,为开发者提供了实用的指南。

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

Java调用JJNI相信大家都会了,昨天写一个jni调用java真是被坑惨了,就不详细描述了 在此记录一下

调用步骤

1:申明引用函数Class函数

例如:

char* classname = "com/android/cofig/XXX";  //跟java的区别是.换成/
jclass clazz = (*env)->FindClass(env, classname);// 找到javaclass文件

2:寻找class里面的方法就是JAVA的方法函数 得到一个实例的域的ID

例如:

方法名作用
GetFieldID得到一个实例的域的ID
GetStaticFieldID得到一个静态的域的ID
GetMethodID得到一个实例的方法的ID
GetStaticMethodID得到一个静态方法的ID

调用注意区分


jmethodID method = (*env)->GetMethodID(env, clazz, "test",
            "(Ljava/lang/String;)Ljava/lang/String;");
//clazz函数 test函数名 (Ljava/lang/String;)Ljava/lang/String; 这一句是定义参数借口的传递值和返回值这个方法名就是这样
public String test(String test)
{
}

//定义方法的对照表网上找的一份

类型符号
booleanZ
byteB
charC
shortS
intI
longL
floatF
doubleD
voidV
object对象LClassName; L类名;//这个理解成String转换就成这样 Ljava/lang/String;
Arrays[array-type [数组类型

3:函数调用

例如:

//clazz为第一步定义的clazz  method方法定义的id
jstring result = (jstring)(*env)->CallObjectMethod(env, clazz, method,
            action);
// 使用CallObjectMethod方法调用方法。参数的意义: 
/**env-->JNIEnv 
//obj-->第一步定义的class
//mid--> 即第二步获得的Methodid
//action-->方法需要的参数
**/

当然CallMethod的方法很多 例调用类似
CallVoidMethod CallStaticVoidMethod
CallIntMethod CallStaticVoidMethod
CallBooleanMethod CallStaticVoidMethod
CallByteMethod CallStaticVoidMethod

推荐一个网址查看Android jni的很多函数
http://game.ceeger.com/Script/AndroidJNI/AndroidJNI.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值