美文网首页
jni开发遇到的一些坑

jni开发遇到的一些坑

作者: 鍫民贵子 | 来源:发表于2018-03-31 00:07 被阅读0次

    2018-03-31

    找不到jni导出的函数??

    今天和开发伙伴做智能眼镜的对接。我需要把一个同事用c++写的tcp服务器编译为.so动态库并用java通过jni封装起来,给合作伙伴使用,总之给他们提供jar包和.so动态库...但因为是在智能眼镜里运行,而智能眼镜是android4.3,我在android studio里编译的jar包居然因为proguard版本不同,而无法调用。我一想,只有一个java文件,我就不编译了,直接给他,让他自己加入项目里,这总归没有编译格式不同的问题了把。结果是成功加载了.so库,但找不到导出的函数!但我用nm查看.so库,却是有的!@#¥@....什么情况??

    后来想明白了,因为jni的接口格式是这样的:包名类名函数名,而在java类里是直接调用函数名,忽略包名和类名的。把调用.so库的java类直接放到项目中编译,因为包名变了,自然是找不到jni接口的(.so库的导出函数)

    c++里调用GetMethodID时抛出NoSuchMethodError异常

    在手机里运行,没有这个异常,而在眼镜里运行,却找不到java函数...又什么情况?弄了半天,后来才想到是不是因为眼镜的项目包含jar包后release编译,把在java层里没有调用到的函数优化掉了,因为这几个java函数是作为c++的回调函数,只在.so库里调用的。立马动手,在java里先调用了这几个函数后,果然可以在.so库里通过GetMethodID找到了!!

    相关文章

      网友评论

          本文标题:jni开发遇到的一些坑

          本文链接:https://www.haomeiwen.com/subject/bzvwcftx.html