高效的jni方案-swig

jni是java调用原生方法的接口.原生方法比java方法的执行速度更加快,然而编写jni代码却极为麻烦.例如:

  • 编写jni就是将C/C++代码转为jni的语法,也就是学习一套jni语法.另外这个的前提是,先要学会C/C++,所以成本很大,需要学习两套语言.
  • jni的方法命名特别麻烦,Java包名类名_方法名,包名中的点转为下划线.

单jni的方法命名就已经非常非常耦合了,原生方法都不能随便换名字也不能换包!!!简直不能忍.

偶然看到一个了神器可以完美的解决这个问题,就是swig

SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。

说的直白一点就是写C/C++代码,再写一个接口,自动生成恶心的jni代码和jni的java包装类.使用的时候直接使用java包装类即可.特别方便!

官方的android使用事例: http://www.swig.org/Doc3.0/Android.html

网上很多教程都是makefile+swig的jni模式,现在google推荐的方式是cmake,不知道为什么没有cmake+swig的教程,于是就试了一下,发现使用还是特别方便!只要在CMakeLists.txt中add_library和target_link_libraries加上自己的native库就好了.


更新:2017-9-6

用一些简单的算法测试jni和java,发现jni的效率并不比java高,反而低了很多.并且android api越高,java比jni的效率越高.

与leader聊jni的时候,他也肯定这样的结果.jni与java的优势也许只有加密了,防止反编译.

以上.

附:

cmake官方API

swig官方文档

赞赏还是要有的QAQ
100斤 WeChat Pay

微信打赏

100斤 Alipay

支付宝打赏