Cordova源码解析
Apache Cordova是一个开源的移动开发框架,封装了native和js通讯等功能。通常,当我们需要开发具有h5功能的混合App时,可能会使用Cordova框架。
本篇文章将会从大的层面分析Cordova源码。
Cordova的通信流程
Cordova的整体native和js的通信流程如下图:
分析上图可知:
- SystemExposedJsApi
js通过@JavascriptInterface机制调用native方法,主要有exec、setNativeToJsBridgeMode
以及retrieveJsMessages三个方法。三个方法的功能分别是:
-
exec:调用native具体的插件方法;
-
setNativeToJsBridgeMode: 设置native的BridgeMode模式;
-
retrieveJsMessages:js主动获取native中需要给到js的消息。
以上三个方法的最终执行是在CordovaBridge的对应方法中。这三个方法在执行的时候,都会校验方法的入参bridgeSecret。js的bridgeSecret值是通过走onJsPrompt机制,调用到CordovaBridge的promptOnJsPrompt方法的“gap_init:” case获取的。
注:js也支持走onJsPrompt机制,达到执行exec、setNativeToJsBridgeMode
以及retrieveJsMessages三个方法的效果。
- NativeToJsMessageQueue
该类的作用主要是:
- 管理native给js的消息队列;
- 按照cordova规范,将消息队列中的消息转成字符串格式,用来发给js。
- BridgeMode
BridgeMode主要用来native给js主动发送消息,比如native插件中,异步业务执行结束后,给js的回调信息。以及native给js发送一些事件消息等。
CordovaInterfaceImpl
CordovaInterfaceImpl主要包装activity相关功能,比如打开activity页面、请求系统权限等。
CordovaWebViewImpl
外部可以把CordovaWebViewImpl当作webview使用,且其还包含了一些对activity生命周期方法的处理。