在C里面调用JAVA里的方法

这里我是在hello jni工程的基础上完成的

1,在MyJNI中写两个方法,然后通过javah使jni下的.h文件构建native方法


2,在jnitest.c里实现ccalljava

下图中的jclass jclazz=(*env)->FindClass(env,"com/example/sjw/day0419jnitest/MyJNI");//获取类


jmethodID jmethodid=(*env)->GetMethodID(env,jclazz,"helloFromJava","()I");//获取方法的,这里因为是参考的他人代码写的所以不太懂,于是出现了问题。因为别人代码中最后一个参数是“()V”我就跟着抄了上去,在运行时会闪退,这是错误日志:


说没有找到该方法,于是我就去网上找资料,也没 发现类似错误。所以我想着可能是一个低级错误,所以我去搜别人使用GetMethodID方法的,于是我发现了下图,他这个是I,我恍然大悟,这里的V不是固定的而是返回的数据类型Void,于是我改成I之后就成功了。

3这里要因为是以log形式输出所以要导log包#include <android/log.h>,但是这里我在build时报错说找不到__android_log_print方法,于是我在网上查找要在android.mk 中添加LOCAL_LDLIBS := -llog方法之后就可以build了。但是运行是会出现下图这样的错误

于是我在网上查找,发现只要在app下的build.grandle中的ndk下添加ldLibs “log”即可运行成功

这是打印出的日志:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容