智能手机跨平台中间件CPAM-SP设计与应用*
2014-02-10傅俊谦李俊杰肖德琴
傅俊谦,李俊杰,向 花,肖德琴
(1.华南农业大学信息学院,广东广州510642;2.广东领先数码技术有限公司,广东广州510075)
智能手机跨平台中间件CPAM-SP设计与应用*
傅俊谦1,李俊杰2,向 花2,肖德琴1
(1.华南农业大学信息学院,广东广州510642;2.广东领先数码技术有限公司,广东广州510075)
针对当前移动应用开发中存在的开发费用高、周期长、覆盖率较低、编程语言不统一等问题,提出采用JavaScript设计并实现了一种基于智能手机应用的跨平台中间件(CPAM-SP,a Crossing Platform Application Middleware based on Smart Phone),详细介绍了CPAM-SP与iOS、Android、Windows Phone等各主流智能移动终端操作系统间的通信机制以及应用方案。实验结果表明,使用智能手机跨平台中间件,开发人员只需要使用基本的Web技术即可开发出Web应用。使用智能手机跨平台中间件,能达到同一代码能够在不同移动终端平台上运行的效果,降低了开发难度,提高了开发效率。
智能手机终端 中间件 跨平台开发 体系结构
0 引 言
随着无线移动应用的推广与普及,移动终端也越来越呈现出多样获得趋势[1]。智能手机作为移动智能终端中普及率最高、形态最多样、需求量最大的典型产品,载体作用不断上升,市场空间极为广阔[2]。不同的手机生产厂家生产具备不同显示能力和数据处理能力的采用不同操作系统的智能手机终端。智能手机款式多、操作系统平台多、适配难,在移动应用开发中,开发者普遍面临着开发费用高、周期长、覆盖率较低等问题[3]。同时,移动应用开发者通常只熟知基本的Web技术(HTML,CSS, JavaScript),为开发一款对应不同平台的软件常常需要他们学习风格完全不同的编程语言。编程语言的不熟悉以及移动开发面临的问题已成为当前制约移动互联网发展的主要因素之一。
为了摆脱操作系统和硬件环境的差异,实现一套代码不用修改就可以适应不同的平台,使移动应用开发能够达到“一次编写,少量适配,大量覆盖和分发”的水平。本文根据当前移动应用开发中存在的开发费用高、周期长、覆盖率较低、编程语言不统一等问题,采用JavaScript设计并实现了一种基于智能手机应用的跨平台中间件(CPAM-SP)。下面将首先介绍CPAM-SP的体系结构,然后详细设计CPAM-SP与iOS、Android、Windows Phone等主流智能移动终端操作系统间的通信机制,最后介绍CPAM-SP的应用方案。
1 CPAM-SP体系结构
CPAM-SP的体系结构如图1所示。Web应用的页面使用基本的Web技术即HTML,CSS以及JavaS-cript来编写,Web应用的页面加载工作由各移动终端平台的浏览器页面渲染引擎完成[4]。CPAM-SP通过拦截函数拦截页面代码对CPAM-SP插件的调用,CPAM-SP提供的插件按照功能分为摄像头插件模块、文件插件模块、多媒体插件模块、通知插件模块、联系人插件模块、网络插件模块等模块,后续还可以根据实际情况需要不断添加相应功能的插件模块。最后CPAM-SP的插件调用各移动终端平台(如iOS、Android、Windows Phone等)提供的API,如摄像头、多媒体、文件等API,实现相应的功能,通过回调函数通知页面相关操作完成。其中CPAM-SP层与本地移动终端平台API层合称本地层。
图1 体系结构Fig.1 Architecture figure
2 CPAM-SP通信机制详细设计
CPAM-SP是Javascript调用本地移动终端平台API的一个桥梁,它负责把外部的Javascript调用转化为内部系统本地移动终端平台API的调用[5]。开发人员只需要使用基本的Web技术即可开发出跨平台的Web应用,在Web应用运行时,首先加载中间件的Javascript文件,然后通过拦截Javascript语言对CPAM-SP提供的插件的调用,CPAM-SP将根据Web应用当前所运行在的移动终端平台来调用所需要的相应移动终端平台的SDKAPI,调用完毕后通过回调函数通知页面相应动作完成页面可以继续执行其他操作[6]。
由于不同的移动终端平台采用不同的架构, CPAM-SP在具体实现与各移动终端平台本地层通信时会有所差异[7-9]。在实际的设计过程中, CPAM-SP采用工厂模式,把调用本地移动终端平台API的插件类统一继承于插件抽象类Plugin,而插件抽象类实现Plugin接口。Plugin插件抽象类主要作用是要让派生类实现execute函数,完成各插件所要达到的功能。CPAM-SP采用PluginManager类来管理各继承了Plugin类的子插件类,根据WebChrome-Client类传递过来的Javascript请求参数,确定需要调用的本地插件类。PluginManager类根据Plugin. xml文件中声明的插件类注册不同的子插件类,不同的子插件类封装了不同功能的本地移动终端平台API,当Javascript需要调用本地移动终端平台API时,PluginManager将从Plugin.xml列表中寻找相对应的本地调用并转发该请求。CPAM-SP的整个通信机制主要由3大部分组成,分别是Javascript调用本地代码、本地代码调用本地移动终端平台API以及本地代码回调Javascript。Javascript层与移动终端平台本地层之间通信原理图如图2所示。
CPAM-SP通信机制的核心内容包括本地代码调用、本地API调用和本地代码回调3大组成部分,下面对这3部分进行重点介绍。
2.1 本地代码调用
本地代码的调用通过Web应用页面调用CMAP-SP的JavaScript文件实现,调用的流程如下:
1)在Web应用页面中加载CPAM-SP的Javascript文件,添加document.addEventList ener()等待监听事件。
2)如果中间件的Javascript文件加载成功,则可以开始调用Javascript文件中的本地代码,通过调用本地代码实现对本地移动终端平台API的调用。
3)本地代码通过WebChromeClient类拦截on-JsPrompt回调,利用带有特殊标记开头的标志得知是调用本地插件请求,然后向PluginManager类转发该请求。
4)PluginManager类将会根据参数来查找并转发该请求,最终由对应的子插件完成该请求。
图2 Javascript层与移动终端平台本地层之间通信机制Fig.2 Communication mechanism figure between Javascript layer and local layer
2.2 本地API调用
本地代码调用本地移动终端平台API的流程是CPAM-SP的核心。与本地插件通信密切相关的是: Plugin类,PluginManager类,PluginResult类,CallbackServer类。Plugin类是本地层所有插件的抽象基类,所有子插件都继承了Plugin类并实现Plugin类中的execute方法。由子插件最终实现对本地移动终端平台的调用,其流程如下:
1)Javascript端调用本地代码时,onJSPrompt拦截会相关的action请求并将其转发给PluginManager类,而PluginManager类便会负责查找并执行对应的子插件类。所有的子插件类都由PluginManager托管。由于PluginManager类自身对所有的子插件类进行了管理,因此其可以很轻松的通过service找到对应的子插件类。PluginManager类载入子插件的方式主要是通过读取plugins.xml中的配置。配置中的属性name与service对应,属性value与子插件类的路径对应。
2)然后PluginManager类向对应的子插件类转发该action。
3)对应的子插件类根据action判断插件需要执行的动作方法并调用本地移动终端平台的API执行该action。
4)对应的子插件类根据执行action的情况返回一个PluginResult。PluginResult表示插件执行结果的实体。它主要包含了3个字段,分别是状态码status,message和keepCallBack。最基本的状态码分别是OK(成功),NO_RESULT(没有结果),Error(失败),其他的状态码还定义了许多失败的具体异常码。message是返回的结果实体,message将作为参数传入回调函数中。keepCallBack表示是否需要保持回调。如果该项为false,那么在Javascript层在执行回调后将立即删除回调以释放资源。toSuccess-CallBackString和toErrorCallback String两个工具方法将生成一个Javascript回调语句,配合CallBackS-erver类实现了本地端Javascript的回调。
2.3 本地代码回调
CPAM-SP在本地层建立了一个CallBackServer实现回调。由Javascript不断向CallBackServer类请求回调语句,然后执行该回调。CallBackServer提供了两种模式,一种是基于XMLHttpRequst,一种是基于轮询。XHR的方式即Javascript层不断向Call-BackServer发送XMLHttpRequest请求,而Call-BackServer则将回调语句返回给Javascript。轮询方式则是Javascript通过prompt向本地发送poll请求,本地将从CallBackServer中拿出下一个回调返回给Javascript。
3 跨平台中间件CPAM-SP的应用
所有基于CPAM-SP开发的Web应用在页面开始加载时必须先启动CPAM-SP。CPAM-SP的启动主要依赖于Javascript文件中的初始化函数完成。
首先,在Javascript文件中,其channel模块注册了监听onNativeReady事件。当所有本地插件被注册后,本地层触发onNativeReady事件表示本地层准备完毕,可以接受plugin调用。onDOMContentLoaded表示Html页面的DOM内容已经被浏览器解析。在这两个事件完成后Javascript文件中包含的其他模块被实例化,当准备完毕后初始化函数广播on-CordovaReady来通知用户可以使用各子插件的功能。接着初始化函数尝试获取硬件设备属性和网络连接属性,当一切都准备好后,onDeviceReady事件会被触发表示所有的事件对象已经创建,并且硬件属性已经被设置。CPAM-SP启动的流程图如图3所示。
图3 CPAM-SP启动的流程Fig.3 Flow chart of CPAM-SP's initialization
CPAM-SP完成启动后,浏览器的页面渲染引擎加载页面的其他内容并显示在手机屏幕上。当整个页面完成加载后,Web应用进入可与用户交互阶段,此时用户可根据页面提示使用该Web应用。CPAM-SP提供了功能丰富的API接口,基本覆盖常用的各移动终端平台提供的API接口。移动应用开发者只需要调用CPAM-SP提供的API接口,即可控制不同移动终端平台实现对应的功能,开发出对应多个主流移动终端平台的Web应用。
图4展示了使用本跨平台中间件开发的一个Android平台的音乐播放器演示程序,使用该程序可以对mp3文件进行播放、暂停播放、停止播放等操作,在播放过程中还能显示当前播放进度和阅读txt文件。图5展示了使用本跨平台中间件开发的一个Android平台的文本阅读器演示程序,使用该程序可以打开txt文件进行阅读。
图4 音乐播放器演示程序Fig.4 Music player demo
图5 文本阅读器演示程序Fig.5 Text reader demo
4 结 语
CPAM-SP是一个可以统一连接Web应用和移动终端硬件的桥梁,它不仅为iOS、Android、WindowsPhone等主流智能移动终端操作系统构建了原生的程序项目模板,还可以为其提出了相应操作硬件接口的API。通过本跨平台中间件构建的Web应用只需要使用一段JavaScript代码即可拥有足够的权限访问移动设备特有的硬件功能。CPAM-SP框架提供了一系列的API供开发人员在JavaScript代码中调用;通过这些API调用,Web应用就可以与相应移动平台的SDKAPI进行交互,以调用当前运行的移动终端平台本地的功能,从而达到同一代码能够在不同移动终端平台上运行的效果,降低了开发难度,提高了开发效率。与同类产品PhoneGap相比,该跨平台中间件支持的移动终端平台还比较少,在中文字符支持上优于PhoneGap,由于与PhoneGap一样采用Web技术,在特别复杂的应用运行速度稍显缓慢。同时,该跨平台中间件提供的插件还比较少,能提供的功能还比较有限,下一步将开发更多的插件以提供更全面的功能给开发人员调用。
[1] 林远.跨平台手机移动中间件[J].杭州电子科技大学学报,2011,31(05):151-154.
LIN Yuan.Cross-platform Cell Phone Mobile Middleware [J].Zhejiang University of Technology.2011,31(5): 151-154.
[2] 温晓君.中国智能手机产业链研究及赶超之路[J].通信技术,2013,46(08):131-135.
WEN Xiao-jun.China’s Smart Phone Industry Chain and Development[J].CommunicationsTechnology. 2013,46(8):131-135.
[3] 林远.跨平台手机移动中间件的设计与实现[D].杭州:浙江工业大学,2012.
LIN Yuan.Dissertation Submitted to Zhejiang University of Technology for the Degree of Master[D].Zhejiang U-niversity of Technology.2012.
[4] Introduction to PhoneGap:Developing Native Applications for Libraries[J].The Reference Librarian,2012, 53(4):441-447.
[5] 陶强,刘宴兵,肖云鹏.面向多终端异构系统的中间件平台体系结构研究[J].计算机工程与设计,2012,33 (04):1431-1436.
TAO Qiang,LIU Yan-bing,XIAO Yun-peng.Research on Architecture of Middleware Platform Oriented to Multiple-terminal Heterogeneous System[J].Computer Engineering and Design.2012,33(4):1431-1436.
[6] 武晶晶.跨平台的PhoneGap研究[J].信息安全与技术,2012,3(12):71-72.
WU Jing-jing.The Cross Platform PhoneGap Research [J].Information Security and Technology.2012,3 (12):71-72.
[7] Reto Meier,佘建伟,赵凯.Android 4高级编程[M].第3版.北京:清华大学出版社,2013:97-211.
Reto Meier,SHE Jian-wei,ZHAO Kai.Android 4 Advanced Programming[M].3.Beijing:Tsinghua University Press,2013:97-211.
[8] Fredrik Olsson,Jeff LaMarche,Jack Nutting,等.精通iOS开发[M].第5版.北京:人民邮电出版社,2013:66-108.
Fredrik Olsson,Jeff LaMarche,Jack Nutting,et al.Proficient in iOS Development[M].5.Beijing:Posts and Telecom Press,2013:66-108.
[9] 李开涌.Windows Phone 7应用开发入门与实践[M].北京:机械工业出版社,2011.
LI Kai-yong.Introduction and Practice to Windows Phone 7 Application Development[M].Beijing:China Machine Press,2011.
FU Jun-qian(1989-),male,graduate student,mainly engaged in the research of computer networks and applications,wireless multimedia network.
李俊杰(1967—),男,高级工程师,主要研究方向为电子信息,互联网数据存储与处理,移动互联网应用等;
LI Jun-jie(1967-),male,senior engineer,mainly engaged in the research of electronic information,Internet data storage and processing,mobile Internet applications.
向 花(1969—),女,高级电信业务师、通信工程师,主要研究方向为互联网环境下企业客户关系管理、项目管理、数据挖掘等;
XIANG Hua(1969-),female,advanced telecommunications services division,communications engineers,mainly engaged in the research of enterprise customer relationship management in the Internet environment,project management,and data mining.
肖德琴(1970—),女,博士,教授,博士生导师,主要研究方向为计算机网络应用,无线传感器网络,农业信息感知。
XIAO De-qin(1970-),Ph.D.,professor and doctoral tutor,mainly engaged in the research of computer networks,wireless sensor networks,agricultural information perception.
Design and Application on a Crossing Platform Application Middleware based on Smart Phone(CPAM-SP)
FU Jun-qian1,LI Jun-jie2,XIANG Hua2,XIAO De-qin1
(1.College of informatics,South China Agricultural University,Guangzhou Guangdong 510642,China; 2.Guangdong Lingxian Digital Technology Cooperation,Guangzhou Guangdong 510075,China)
Aiming at the problems in current mobile application development such as high cost,long development cycles,low coverage and without uniform in programming languages,a CPAM-SP(Crossing Platform Application Middleware based on Smart Phone)with JavaScript is proposed in this paper.The communication mechanisms and application solutions between CPAM-SP and iOS,Android,Windows Phone and other mainstream smart phone mobile terminal operating systems are introduced in this paper.Experimental results show that developers could develop their web applications easily by using the middleware, which only needs basic Web technologies to develop the application program.Using middleware can achieve the effect of the same code running on different mobile terminal platform,thus to reduce the development effort and improve the development efficiency.
smart mobile terminals;middleware;cross-platform development;architecture
TP316.5
A
1002-0802(2014)08-0910-05
10.3969/j.issn.1002-0802.2014.08.014
傅俊谦(1989—),男,硕士研究生,主要研究方向为计算机网络应用,无线多媒体网络;
2014-03-05;
2014-06-03 Received date:2014-03-05;Revised date:2014-06-03
广东省高新区发展引导专项计划(No.00986980192763014)
Foundation Item:A Special Program Guide of High and New Technology Industrial Development zone in Guangdong(No. 00986980192763014)