JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。

JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。,第1张

应该是没有问题的,jni是支持重载方法的,他是把重载方法转换成C语言的两个不同方法,方法名是不一样的。我怀疑你的问题是由于dll没有用最新的。你可以把sayhello方法名修改成display,然后重新走一遍jni的 *** 作过程,看看是什么效果。

下面是这个问题和你是一样的

Androidmk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := static_add

LOCAL_SRC_FILES := libstatic_adda

include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := share_add

LOCAL_SRC_FILES := hello-jnic

LOCAL_STATIC_LIBRARIES := static_add

LOCAL_C_INCLUDES := $(LOCAL_PATH)/jni/app/src/main/jni

LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

LOCAL_STATIC_LIBRARIES := static_add

这一行换成:

LOCAL_LDLIBS += -lstatic_add

或者

LOCAL_LDFLAGS += $(LOCAL_PATH)/libstatic_adda(可以任意指定路径)

jclass GpsInfoClass = env->FindClass("com/parser/GPSINFO");

jfieldID ID_bValid = env->GetFieldID(GpsInfoClass,"bValid","I");

jfieldID ID_bSpeed = env->GetFieldID(GpsInfoClass,"bSpeed","I");

env->SetIntField(_obj,ID_bValid,(jint)infobValid);

env->SetIntField(_obj,ID_bSpeed,(jint)infobSpeed);

return _obj;

以上就可以了。但是不知道你的BYTE是自定义的什么类型,如果是char之类的,就另外想办法转换成jint。其中 _obj 变量是public native GPSINFO getGpsInfo();这个本地方法在C代码中的参数:JNIEXPORT jobject JNICALL Java_com_parser_GPSINFO_ getGpsInfo(JNIEnv env, jobject _obj)

以上就是关于JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。全部的内容,包括:JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。、如何在android studio中用JNI调用静态库、我现在在做Android,用到了JNI,写了一个C程序,返回的是个结构体,在Android如何获取C程序返回的结构体呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9335807.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存