SmartJNI —— 更简洁更高效的JNI接口封装

引入
      平时我们在android NDK开发过程中,碰到最多的情况就是通过JNI回调java的API。JNI可以理解为java反射框架的本地版本。JNI所提供的原生接口,如果需要通过反射获取methodID或fieldID,需要先写出写函数和字段的签名(sign),而且调用过程极其繁琐,详细的使用说明,可以参考链接  JNI使用教程
      另外,相比之下,JAVA层下的反射API,使用起来简洁方便得多, 可参考链接  JAVA反射教程
      而SmartJNI的引入,目的主要有两个:
       其一,屏避掉JAVA和JNI两套反射API在使用上的差异;
       其二,采用面向对象的方式封装JNI的原生API, 大大减少开发代码量,而且可读性更强。

实现原理
SmartJNI实现的技术要点,主要有如下两点:
其一,就是屏避掉函数签名的细节, 不需要调用方编写签名字符串;
详细的实现,请参见源码 Method.cpp。

其二,本地代码中可变参数与Java层可变参数之间的传递;
详细的实现,请参见源码 Method.cpp。

示例对比
原生的JNI调用示例就不提供了,网上很多,下面是采用SmartJNI和Java API的示例对比:



                                               SmartJNI调用示例





                                                    JAVA 调用示例

通过SmartJNI的封装,两者在使用上,除了本身语法上的一些限制,基本上已经一致了。

最后说明
      目前SmartJNI还不能完成替代JNI,但基本可以用。要完全替换掉JNI,还需要花些时间慢慢完善,SmartJNI项目已经在googlecode上开源,地址是http://code.google.com/p/smart-jni/,大家可以通过 svn checkout下来。另外,如果有兴趣跟我一起完善SmartJNI的话,也可以私下找我,我开通读写权限。

PS:如果你有什么好的建议,可以直接在 googlecode 上的Wiki上给我反馈,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值