安卓从jni返回并访问java对象/类
我有一个Java方法,它返回对象/类“Readcommpacket”的实例。对Java方法的调用是从NDK/JNI端(c++->;Java->;return->;Java object->;c++)启动的。我如何完成这项工作,我正在努力使用正确的JNI调用/签名来完成这项工作。非常感谢您的帮助
用作返回的Java对象/类
public class ReadCommPacket {
public byte[] RCPbtyeread;
public int RCPbytecount;
public ReadCommPacket(byte[] btyeread, int bytecount){
this.RCPbtyeread = btyeread;
this.RCPbytecount = bytecount;
}
}
JNI调用的Java方法
public ReadCommPacket BTMsgToNDKComm(){
if(bluetoothConnectedRunnable != null){
return bluetoothConnectedRunnable.readBT();//returns ReadCommPacket obj
}
return new ReadCommPacket(null, -1);
}
JNI/NDKC/c++代码
void recvFromBlueTooth(char * recvdByte){
JniMethodInfo methodInfo;
if (! getMethodInfo(&methodInfo, "BTMsgToNDKComm", "V"))//what signature would I use?
{
LOGD("Cannot find method!");
return;
}
//retreive btye[] and int from Readcommpacket here. What JNI calls?
}
# 1 楼答案
签名包含包名
假设包名为com。范例
那么您的示例中的签名将是:
P.S.如果从C++调用此方法,请确保类名称和;pro guard不会混淆方法名称(如果使用)
# 2 楼答案
运行命令
javap -s classname.class
输出将具有您可以使用的描述符,因为它包括“;”例如:
javap -s abc.class
正在尝试返回abc的实例