Cordova 3.x 源码分析(7) -- CordovaLib概要

本文详细介绍了Cordova在Android平台上的工程结构与组件原理,包括关键类的作用、WebView的改进方案及插件的工作流程。
在[url=http://rensanning.iteye.com/blog/2020843]http://rensanning.iteye.com/blog/2020843[/url]已经介绍过通过Cordova CLI创建Cordova工程。

Cordova生成的Android工程主要来自于以下目录:
[quote]C:\Documents and Settings\RenSanNing\.cordova\lib\android\cordova\3.4.0\bin\templates\project[/quote]
其中所用的CordovaLib来自于以下目录:
[quote]C:\Documents and Settings\RenSanNing\.cordova\lib\android\cordova\3.4.0\framework[/quote]

从Cordova 3.3.0以后,方便调试,CordovaLib的提供形式从jar文件变成了Android Library。
参考:[url=https://issues.apache.org/jira/browse/CB-5232]https://issues.apache.org/jira/browse/CB-5232[/url]

CordovaLib中的代码主要包括:
com.squareup.okhttp: [color=blue]导入HTTP+SPDY客户端的[url=https://github.com/square/okhttp]OkHTTP[/url],获取网络资源。[/color]
org.apache.cordova: [color=blue]剩下的所有代码都在该包下(以前还有过org.apache.cordova.api)[/color]
[img]http://dl2.iteye.com/upload/attachment/0096/4860/16d7f094-f622-33a4-97df-ef7f5c735cad.png[/img]

[b]基础类:[/b]
[list][*]CordovaInterface.java CordovaActivity的接口(使plugin不依赖CordovaLib更独立)
[*]CordovaActivity.java 应用的主Activity需要继承自该类。
[*]Config.java 解析config.xml
[*]Whitelist.java 白名单列表
[*]LinearLayoutSoftKeyboardDetect.java 布局(检测软键盘)[/list]

[b]Webview相关:[/b]
[list][*]CordovaWebView.java 核心Webview类
[*]CordovaWebViewClient.java 捕获Webview事件回调(2.x版本没有WebResourceResponse)
[*]IceCreamCordovaWebViewClient.java 在3.x、4.x版本中拦截网页中资源请求,比如js,css,img,ajax
[*]CordovaChromeClient.java 捕获JavaScript事件,其中onJsPrompt() 对应2.3模拟器的交互Bug
[*]AuthenticationToken.java Http请求的认证
[*]ScrollEvent.java 回传onScrollChanged事件坐标
[*]CordovaResourceApi.java 获取资源[/list]

[b]Plugin相关:[/b]
[list][*]PluginManager.java 插件管理
[*]PluginEntry.java 插件实体
[*]CordovaPlugin.java Plugin的基类
[*]CordovaArgs.java 接收JSON参数
[*]PluginResult.java 执行结果
[*]CallbackContext.java 通过sendPluginResult回传结果
[*]ExposedJsApi.java JS桥接
[*]NativeToJsMessageQueue.java 回传结果的消息队列[/list]

[b]无用类:[/b]
[list][*]DirectoryManager.java 3.1开始@Deprecated,移动了file的plugin中
[*]ExifHelper.java 3.1开始@Deprecated,移动了camera的plugin中
[*]FileHelper.java 3.1开始@Deprecated,移动了camera和file的plugin中
[*]JSONUtils.java 3.1开始@Deprecated,无用类
[*]DroidGap.java 2.7开始@Deprecated,DroidGap.java名字太难听,改成了CordovaActivity。参考:[url=https://issues.apache.org/jira/browse/CB-2657]https://issues.apache.org/jira/browse/CB-2657[/url][/list]
****这些文件中有些Java文件已经不再建议使用,在未来的某个版本将会被删除!!!

[b]其他:[/b]
[list][*]App.java 清缓存、loadUrl、退出程序等的plugin(以后会被单做成一个plugin)
[*]LOG.java 日志util[/list]

Android WebView由于版本的问题,存在很多局限和Bug,而Android 4.4开始默认搭载Google的最新渲染引擎Blink/Chromium。
①[url=https://github.com/pwnall/chromeview]ChromeView[/url]使用Chromium代替WebView的一个实现,也有[url=https://github.com/thedracle/cordova-android-chromeview]cordova-android-chromeview[/url],不过更新比较慢。
②[url=https://crosswalk-project.org/]Intel Crosswalk[/url]构建于Chromium之上,提供更加丰富的功能。同时提供了[url=https://github.com/crosswalk-project/crosswalk-cordova-android]crosswalk-cordova-android[/url]。
使用以上2中解决方案都能改善Webview的问题,但是同时你的apk文件的大小将增加20M左右。

[b]程序入口:[/b]
public class CordovaSample extends CordovaActivity 
{
@Override
public void onCreate(Bundle savedInstanceState)
{
// 读取config.xml,设置UI
super.onCreate(savedInstanceState);
// 初始化Webview后添加到UI中
super.init();
// 加载首页file:///android_asset/www/index.html
// 其中index.html是在config.xml中配置的。
super.loadUrl(Config.getStartUrl());
}
}


[b]启动序列图:[/b]
[img]http://dl2.iteye.com/upload/attachment/0096/5469/03eea50d-7ea0-3320-8da2-d044a9a28c07.jpg[/img]

[b]Plugin序列图:[/b]
[img]http://dl2.iteye.com/upload/attachment/0096/5737/241e91fb-4d70-3cd6-99be-18392d66b84c.jpg[/img]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值