最近的移动端项目中,涉及到Hybrid开发方式的越来越多了,需要一种原生与Web相融合的技术,最终我们选择了Cordova。原因如下:
- Apache作为幕后老大,背景强大;
- 功能完善;
- iOS与Android都有比较完整的支撑;
- 可扩展性比较好,有诸多现成的插件可以用;
- 社区也比较活跃。
但是也存在很多问题,也就是因为这些问题,才打算整理几篇文章,把我们在项目过程中遇到的问题记录下来。由于比较官方的资料随时能查到,所以整理的文章中,基本不涉及文档原文,主要是问题、解决办法和一些自己的理解。
之所以觉得问题比较多主要是以下一些原因:
一、容易混淆的概念
官方的文档中提到的Cordova,主要是那一套包括命令行工具、库、插件的套件,而实际开发过程中,这些内容可能会是分开的。后文中会为这些分别起一些名字,以方便后续文章中明确指哪些内容。
- CordovaLib——封装WebView的那套库,可以集成到代码中
- Cordova-Plugin——原生功能插件
- Cordova-CLI——命令行工具包及整个工程体系
二、使用方法的不同
按照前面的概念,官方文档大部分用于描述Cordova-CLI的使用和规则,且鼓励Web资源打包在本地。但是实际的使用场景,为了灵活和方便控制(比如:加载时机的控制、实例控制、自定义布局、功能扩展等),更多是把CordovaLib集成到自己的应用中,而且Web资源即有可能在本地,也有可能在远程服务器。
三、描述角度不同
官方文档的目的,更多的是为了让不熟悉原生开发的人,能够通过配置,加上Web技术,来完成应用开发,所以整体来说,把Cordova作为一个黑盒来对待,并且为了方便隐藏了一些细节,并没有描述一些具体过程和关系,比如:
-
plugin.xml
与config.xml
的关系 - Cordova工程中多个
config.xml
之间的关系 - iOS与Android版,
cordova.js
是不同的 -
cordova.js
与cordova_plugins.js
的关系 - 通过Cordova-CLI创建的工程,结构与打包后应用结构不同,有些文件是Cordova-CLI在执行打包的过程中偷偷塞进去的
- 编写Cordova-Plugin时的组成部分,这些部分在生成原生工程以及打包后内容之间的对应关系
希望后续的文章中,能把这些问题逐一说清楚。