这里我是在hello jni工程的基础上完成的
1,在MyJNI中写两个方法,然后通过javah使jni下的.h文件构建native方法
![](https://img.haomeiwen.com/i3426254/416e3d037b1c5ec3.png)
2,在jnitest.c里实现ccalljava
下图中的jclass jclazz=(*env)->FindClass(env,"com/example/sjw/day0419jnitest/MyJNI");//获取类
![](https://img.haomeiwen.com/i3426254/fbcd9c3ca83749f2.png)
jmethodID jmethodid=(*env)->GetMethodID(env,jclazz,"helloFromJava","()I");//获取方法的,这里因为是参考的他人代码写的所以不太懂,于是出现了问题。因为别人代码中最后一个参数是“()V”我就跟着抄了上去,在运行时会闪退,这是错误日志:
![](https://img.haomeiwen.com/i3426254/6d365ef586931ca6.png)
说没有找到该方法,于是我就去网上找资料,也没 发现类似错误。所以我想着可能是一个低级错误,所以我去搜别人使用GetMethodID方法的,于是我发现了下图,他这个是I,我恍然大悟,这里的V不是固定的而是返回的数据类型Void,于是我改成I之后就成功了。
![](https://img.haomeiwen.com/i3426254/d9403d35a10bd4c1.png)
3这里要因为是以log形式输出所以要导log包#include <android/log.h>,但是这里我在build时报错说找不到__android_log_print方法,于是我在网上查找要在android.mk 中添加LOCAL_LDLIBS := -llog方法之后就可以build了。但是运行是会出现下图这样的错误
![](https://img.haomeiwen.com/i3426254/29a8a7959c4c9b48.png)
于是我在网上查找,发现只要在app下的build.grandle中的ndk下添加ldLibs “log”即可运行成功
![](https://img.haomeiwen.com/i3426254/134f850488d98325.png)
这是打印出的日志:
![](https://img.haomeiwen.com/i3426254/b0a0797723fc50c4.png)
网友评论