Webkit Bingings 和 Java JNI 的原理与使用

来源:互联网 发布:gsx激活策略查询软件 编辑:程序博客网 时间:2024/05/21 17:18

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
原创粉丝点击