论文部分内容阅读
摘要:为实现移动设备应用快速开发和跨平台发布的目的,而设计并开发了基于webkit的中间件平台。本文介绍了该中间件的架构和各层的功能。接着介绍了程序开发中的关键工作,对JSCore模块进行扩展。通过对该模块的扩展,增强了中间件平台的功能,充分发挥了移动设备特有的优势。后面介绍了应用开发框架和管理模块。它们的存在,不仅可以加快应用程序开发的速度,而且还为应用程序提供了一个发布交流的平台,使开发者和最终用户更加方便的交流。
关键词:Android;iOS;webkit;中间件
中图分类号:TN949.197 文献标识码:A文章编号:1007-9599 (2012) 06-0000-02
一、设计目的
目前移动网络终端种类型号繁多,每种类型的终端开发接口不统一,使得同一种应用要在不同的平台上都要进行开发或移植。因为终端设备支持的开发语言和运行库不统一,因此对应用开发者所需的技术要求很高,开发和调试难度也相应增大,从而导致开发周期长,开发费用高。
为了解决上述问题,对webkit进行封装,并对javascriptcore模块进行扩展,解除webkit作为网页浏览工具的一些限制,使之支持移动终端本地功能调用。基于这样的中间件进行软件开发,既可以实现跨平台的优点,又能够不受浏览器本身特点的限制,从而达到降低开发周期,节省开发成本的目的。本文主要介绍了基于webkit中间件的设计架构,并简要介绍了如何对javascriptcore模块进行扩展,从而增减webkit的功能。
二、中间件架构设计
图1 中间件架构
如图1所示,中间件平台采用了四层架构模式:系统适配层、Webkit核心、应用开发框架与管理层以及应用层。
(一)操作系统:目前移动设备快速发展,其所采用的操作系统非常多。主流的智能系统有Android、iOS和Symbian,另外一些国际大厂还在开发新的操作系统。这就为软件开发带来了很大的难度,不仅开发人员熟悉多种系统平台软件开发知识,还要额外增加软件的开发周期和成本。本中间件设计的目的就是为了屏蔽操作系统的差异性,使同一款软件可以部署到不同的操作系统,从而节省开发周期与费用。
(二)操作系统适配层:适配层主要解决两件事情:1.适配不同的操作系统;2.提供设备特有的功能:如定位、照相、拨打电话、文件访问等。webkit功能虽然强大,但是其作为浏览器的核心而开发出来,因此其本身存在一些限制:如本地文件的访问、设备特有功能的调用等。因此,我们在本层提供了一些设备特有功能调用的接口,从而丰富与曾加应用软件的功能。
(三)Webkit核心层:本层包含了webkit的所有功能,并且对JavaScriptCore进行了扩展,使应用开发人员可以像调用js标准接口一样调用扩展接口。本层和系统适配层构成了中间件的核心。通过他们配合,就可以进行应用的开发和调试了。
(四)应用开发与管理层:为了方便应用程序的开发工作,本层提供了一些基本的功能,如页面跳转、js加载、footer、header加载等功能。为了使多个应用共存与更新,本层还提供了下载、注册与卸载功能。在应用浏览界面,不仅可以方便的查看与搜索服务器上提供的所有应用,还可以进行应用程序的下载、更新和删除等操作。从而方便中间件用户获取更多、更新的应用程序。
(五)应用层:应用开发人员可以使用应用框架快速的进行程序开发,是应用程序方便的与自己的服务器进行数据交换与展示。因为中间件是基于webkit进行开发的,所以开发应用程序和开发网页使用的技术完全相同。程序的布局、调试很大一部分工作都可以在本地浏览器里面进行,而不必使用模拟器调试。因此使用中间件进行开发,对于页面开发人员来说,学习成本几乎为零。
三、JavaScriptCore功能扩展
为了不增加应用程序开发的复杂性,移动设备特殊功能的提供都采用javascript接口的方式提供。因此,进行JavaScriptCore功能扩展是中间件开发的一个重要工作,主要步骤如下:
(一)添加TestObject.h, TestObject.cpp, TestObject.idl三个文件,并放到Source/WebCore/page目录下。
TestObject.h内容如下,主要完成类的定义:
#ifndef TestObject_h
//头文件引用
namespace WebCore
class TestObject : public RefCounted
public:
static PassRefPtr
String showTest() const;
private:
TestObject();
#endif
TestObject.cpp文件内容如下,用来实现类的各种功能。在实际开发中,会把这些内容以第三方组件的形式提供:
#include "config.h"
#include "TestObject.h"
namespace WebCore {
TestObject::TestObject() { }
String TestObject:: showTest () const
return "Here is test"; stObject.idl文件内容如下:
module window {
interface [OmitConstructor] TestObject {
readonly attribute DOMString showTest;
(二)更改Source/WebCore/page/下的DOMWindow.h文件,完成注册功能:
class TestObject;
//……
public:
TestObject* testObject() const;
TestObject* optionalTestObject() const { return m_testObject.get(); }
private:
mutable RefPtr
(三)更改Source/WebCore/page/下的DOMWindow.cpp文件,添加接口实现:
TestObject* DOMWindow::testObject() const
if (!m_testObject)
m_testObject = TestObject::create();
return m_testObject.get();
(四)在DOMWindow::clear()函数中添加下面代码,完成JS对象清除工作:
m_testObject = 0;
(五)更改DOMWindow.idl文件,添加:
attribute [Replaceable] TestObject testObject;
通过以上步骤就可以完成对jscore的扩展工作。完成编译后,就可以在javascript代码中调用testObject. showTest,以检测添加是否成功。
四、应用框架与管理:
应用框架主要包括下面一些功能:
(一)页面代码加载:把JS数组里面保存的页面加载到现有的框架中。其中页面框架由三部分组成:标题(title)、内容(content)和页脚(footer)。对于这种形式的应用,采用框架开发非常便利。
(二)JS代码加载:根据不同的页面,加载不同的JS代码。虽然这里进行了JS的切换,但是只要把全局变量定义到公有js中,就可以实现变量的全局化。
(三)小工具:为了减小代码体积,我们提供了一个小工具,可以方便的把html代码转换成JS数组。这样做不仅可以减少代码的体积,同时还可以间接实现全局变量,增加程序的灵活性。
应用程序管理:
为了方便程序的共享,我们开发了一个基于中间件的程序管理应用。该应用和我们的应用发布服务器进行通讯,可以实时获得服务器上面发布的所有应用。在管理程序中,主要提供了以下功能:程序浏览、搜索、下载、卸载、评论、推荐等功能。不仅可以方便用户的使用,还可以返回用户的使用心得,以便于程序的改进。
五、小结
本文介绍了基于webkit中间件的设计,通过测试和应用开发可知,它不仅可以方便应用程序的跨平台开发,而且降低了开发周期和难度。对于快速开发与部署应用,有着极大地优势。中间件通过对javascriptcore的扩展,可以方便的使用移动设备本地的一些特殊功能。因此,弥补了把webkit直接作为中间件的不足,扩大了其应用的范围。
参考文献:
[1]蒋章概,陈榕.基于CAR构件的WebKit本地扩展策略[J].计算机应用,2009(29):195-197
[2]李中跃,郭萍.Webkit中 JsCore的扩展方法[J].辽宁省交通高等专科学校学报,2009(11):16-18
[3]构建webkit环境[DB/OL].2012-03-14 http://www.webkit.org/building/tools.html
[作者简介]
郑允升(1982-),男,江苏徐州人,硕士研究生,主要研究方向为嵌入式系统开发、浏览器开发;
袁军(1984-),男,山东烟台人,硕士研究生,主要研究方向为计算机图形学,嵌入式系统开发;