Webkit Bingings 和 Java JNI 的原理与使用

WebKit最神奇的一点是 JS 能调到内核代码(c/c++)

JS方法调到后面c/c++实现颇费周折,其实就是通过IDL和Bindings

1、IDL和Bindings

IDL:接口定义语言,详细解释可见http://trac.webkit.org/wiki/WebKitIDL
Bindings:WebKit动态生成与其他框架(如JavascriptCore, V8)整合的代码

IDL 接口定义,根据开发者需要,自定义接口名称参数
Bindings,通过一定的规范自动解析IDL文件,动态生成与其他框架(JSCore、V8)整合的代码

后台(框架中的)代码,接口跟参数跟IDL文件中定义的一致,这样,就可以通过 js 等脚本调用
到后台的功能代码


2、JNI 的原理跟 Binding 类似

Java 通过 JNI 调用到本地 DLL 或 so 库中的代码,
在使用过程中,
需要在 java 类中声明所调用的库名称
库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断
还需要对将要调用的方法做本地声明,关键字为native。只需要声明,不需要具体实现
示例代码:
static { 
          System.loadLibrary(“goodluck”); 
}
 //声明调用库名称
public native static void set(int i);   //声明本地方法
public native static int get(); 

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件
用 javac testdll.java 编译它,首先生成testdll.class
再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。

C/C++中所需要做的工作 
对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。
然后编译连接成库文件即可。
再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。 
 


大地

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值