这里我是在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”即可运行成功

这是打印出的日志:

网友评论