【发布时间】:2017-11-28 10:14:52
【问题描述】:
以下代码从本地 c 代码调用 java 中的回调函数,传递一些字符串数据作为参数。
原生C层
jmethodID statusId = env->GetMethodID(pctx->jniHelperClz, "CallbackHandler", "(Ljava/lang/String;)V");
jstring string_data = env->NewStringUTF((const char*)"SOME_STRING_DATA");
env->CallVoidMethod(pctx->jniHelperObj, statusId, string_data);
env->DeleteLocalRef(string_data);
Android / Java(回调处理程序)
@Keep
private void CallbackHandler(String string_data) {
// Some Code
}
除了字符串,我还想传递一个 int 类型的数据。我的 java 回调处理程序如下所示。我应该在我的原生层中进行哪些更改以支持两个参数。
@Keep
private void CallbackHandler(String string_data, int int_data) {
// Some Code
}
【问题讨论】:
-
所以在调用
CallVoidMethod时添加jint参数——它的签名是:void CallVoidMethod(jobject obj, jmethodID methodID, ...) -
您需要编辑函数指针
CallVoidMethod的参数以在结构env中多出一个int。 -
GetMethodID 的最后一个参数,即 ("(Ljava/lang/String;)V") 也必须更改对吗?
-
正确:签名也必须更改 - 使用
javap打印出来
标签: java android c++ c java-native-interface