我声明了一个内联本机 JNI 函数 getId。我不确定如何在下面的 %native 片段中告诉 SWIG 如何只返回 java.lang.Object。我现在有待定。我相信类型映射是正确的方法,但我不确定如何使用 %native 函数为原生 JNI 方法声明它。有任何想法吗?
%module Sample
%{
JNIEXPORT jobject JNICALL Java_com_test_SampleJNI_getID(JNIEnv *env, jclass cls)
{
jmethodID cnstrctr;
jvalue args[2];
jobject obj;
jbyteArray bArray;
bArray = (*env)->NewByteArray(env, 32);
(*env)->SetByteArrayRegion(env, bArray, 0, 32, (jbyte *)foo);
cls = (*env)->FindClass(env, "com/test/jni/DeviceId");
cnstrctr = (*env)->GetMethodID(env, cls, "<init>", "(ILjava/lang/String;[B)V");
args[0].i = (*env)->NewStringUTF(env, "id");
args[1].i = bArray;
obj = (*env)->NewObjectA(env, cls, cnstrctr, args);
return obj;
}
%}
%native(getID) TBD getID();
设备ID.java:
package com.test.jni;
public class DeviceId {
private String id;
private byte[] cache;
public DeviceId(String id, byte[] cache){
this.id=id;
this.cache=cache;
}
public byte[] getCache() {
return cache;
}
public void setCache(byte[] cache) {
this.cache = cache;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}