2008年11月,《连线》杂志主编Chris Anderson一文“Web已死,Internet永生”在移动互联网大幕拉开之际引发轩然大波。应用交付的转变注定了传统Web模式已再也不知足用户的需求与体验,Web应用向移动终端的渗透变得异常重要。javascript
对于须要吸引不一样群体用户,知足不一样业务需求的应用而言,如何使用一个实用、成本合理,且可支持大量应用的开发方式来实现咱们的移动愿景?在不少状况下看来,答案是使用Web技术。php
伴随着移动设备与网络结合紧密度的提高,移动平台的普遍支持,以及以HTML5为驱动的Web技术不断演进发展,以Web为中心的移动应用趋势愈发明显。原生应用和移动Web应用的界线也开始逐步缩减。css
同时,众多移动Web开发框架的升级发展也加速了Web应用向移动终端的渗透。以国内开源的移动Web开发平台Rexsee(www.rexsee.com)为例,基于大量的扩展API,经过Javascript实现Web应用对移动终端功能的直接调用,创建起了Web应用与移动终端的桥梁。html
模糊Web应用与原生应用界线前端
原生应用,也就是Native App,能够充分的发挥硬件设备和操做系统的功能特性,并能够彻底不受网络限制,运行效率高,且在用户体验方面有着突出优点。但同时,由于技术门槛的缘由,原生应用在具体实现上须要面对开发周期较长、成本较高、调试与发布以及后期管理维护相对复杂的问题。java
对比Web应用,虽然在复杂的用户交互界面效果,以及对硬件功能的实现方面有着明显劣势,但使用标准化的Web技术为开发者带来了很大的自由度、普遍的应用范围和低廉的成本。android
但即使如此,以浏览器为平台的Web应用相较于原生应用仍旧面临着诸多难以逾越的困境,其中最明显的则是对网络的依赖以及对移动终端的功能支持。web
出于安全考虑,浏览器没法读取本地资源,对于移动设备的不少功能不能直接调用,好比通信录、GPS、蓝牙; 基于浏览器的Web应用严重依赖网络,一旦网络状况不佳,不少交互没法进行; 因为HTTP协议自己的限制,对于消息、推送等功能也会有所影响; ……让Web应用脱离网络,超出浏览器范围运行,并可直接调用移动终端功能。基于这样的价值实现,Rexsee( www.rexsee.com)经过实现一种混合应用的形态,进一步模糊了原生应用与Web应用的界线。
Rexsee支持开发者以标准化Web开发模式,即便用HTML五、CSS3和JavaScript开发,并可经过在线编译生成原生应用客户端,快速实现移动应用。浏览器
跨平台的取舍价值安全
iOS和Android的首当其冲,Symbian、黑莓、Meego、WebOS的夹缝求生,多种移动操做系统平台在当前的移动互联网中各自有着大批用户支持。摆脱平台和硬件环境的差别,让应用适配于所有平台,成为了移动Web应用一开始就须要承担的责任。
下降了对平台和底层的学习成本,提升代码复用以及最终应用交付的适用范围,这是跨平台的优点所在。可是,劣势一样明显:为兼顾不一样平台,开发框架会相对臃肿,开发模式也会被动调整;其次,对于不一样硬件功能的调用不免会由于迎合不一样功能交集而作出舍弃,没法全面实现。
以当前最受关注的iOS平台和Android平台为例。前者因为不支持js调用,本来在Android平台上最为便捷的开发模式需在iOS变成一种“hack”行为,异步调用也成为了让开发者头疼而又不得不采起的选择。
“一次开发,处处运行”成为了开发人员指望实现但又难以作到的问题。基于这样的一个鱼与熊掌的取舍,Rexsee选择深度支持Android平台,从而保证了高效同步的开发方式,以及全面功能的应用交付。截至目前为止,Rexsee提供了接近2000个扩展API,覆盖95%的Android原生功能实现。
同时,针对于目前移动Web开发框架所面对的一个通病,即缺少对系统原生UI控件的调用能力,难以实现等同于原生应用的界面展示这一问题,Rexsee在最新发布的2.8版本里(infoQ报道:http://www.infoq.com/cn/news/2012/02/rexsee2.8-release)扩展多个对象,主要用于建立和管理原生界面元素,支持Android系统的原生UI布局(目前已支持Android SDK Platform API8的所有布局)。
开发者能够经过JS直接生成androidSDK中定义的布局对象和基本对象,对这些对象经过设置样式属性能够很灵活的控制其样式,彻底实现等同于原生应用的界面展示与交互体验。
基于Rexsee的标准化Web开发模式
基于Rexsee的Android应用可使用标准化的Web开发模式进行开发。全部的Rexsee代码仅体如今Web前端,放在HTML页面的<script>标签内。
编写Rexsee客户端,实际上就是编写Rexsee所能理解、渲染的HTML、CSS和Javascript代码。与浏览器不一样,Rexsee这个“浏览器”除了支持Webkit支持的全部对象外,又扩展了100多个Javascript对象及相应的2000个方法和事件。
Rexsee自己具有了浏览器的全部功能,可以加载任何网页代码,并渲染效果。在此以外,Rexsee提供了本地功能的调用接口,能够实现对本地存储、通信录、传感器、定位信息等本地功能的调用。同时,还提供了离线提交、push推送等原生应用功能。而这些,都是普通浏览器没法作到的。
对于开发者而言,只需在掌握Web前端开发的基础上,按需选用Rexsee提供的Javascript对象,按照Rexsee对象的方法、事件编写代码即可实现相应功能。
RexseeHello World
Rexsee开源技术社区在去年年末推出在线开发服务,登录社区并访问“项目中心”就可在线建立、开发应用。同时,该服务更强化了开发者之间的应用源码分享。在Rexsee项目中心,咱们能够很方便的在线实现第一个Hello World程序。
进入项目中心(http://www.rexsee.com/project/index.php)后,点击左侧头部的“建立新项目”开始我们的Hello World应用建立。只需在对应的信息录入框中填写应用信息,并勾选权限设置便可建立成功。
编写index.html页面,输入以下代码:<html> <head> <title>Rexsee Hello World</tiltle> <script type=text/javascript> //Rexsee代码从这里开始 window.onRexseeReady=function(){ rexseeDialog.toast('系统加载完毕!');//出现后随即消失效果 } </script> </head> <body></body> </html>
说明:
随后,利用Rexsee开发版能够方便的查看应用效果并快速调试。
图1. Rexsee Hello World应用截图
Rexsee的开发手册便是一个具体的APK应用程序,具体对象和事件函数的示例演示可在手机上直接运行。
Rexsee开发版是一个专门用于调试Rexsee应用的软件。开发者能够访问以下连接,免费下载Rexsee开发版,并安装在测试用的Android手机,或者模拟器上。Rexsee开发版:http://www.rexsee.com/rexsee/rexseeDeveloper-release.apk ;Rexsee模拟器(有点大):http://www.rexsee.com/rexsee/RexseeEmulator.rar
在代码编写完成以后,点击项目右上角的“编译”按钮就能直接得到一个APK下载地址和该应用的二维码图形。我们的第一个应用开发流程也就所有结束,你能够将编译完成的APK应用投放到任何一个第三方应用市场,并加以推广和运营。
除了基于项目中心的在线开发,你也能够在本地进行。只需将上面示例中的代码编写到index.html文件中,而后打包为zip格式文件,再利用Rexsee的在线编译功能实现封装,一样得到APK程序。
理论上你能够把除了后台代码以外的东西都打包到ZIP包里,好比一些图片,音视频文件,或者HTML的框架文件,CSS文件,JS文件。但考虑到安全、网络速度、流量、交互体验等各方面需求,建议根据具体应用项目来安排。
五分钟建立指南针应用
在熟悉了一个简单的应用开发流程之后咱们能够结合Rexsee的扩展对象,快速实现一个具体的Android应用。在此,咱们以指南针应用为例。
首先须要开启Android的传感器功能,利用Rexsee的“rexseeOrientation.start()”,而后把方向改变时触发的事件写上。
function onOrientationChanged(){ //方向传感器事件,即当方向发生改变时触发的动做 var x = rexseeOrientation.getLastKnownX(); x = 90 - x; document.getElementById('oriDiv').style.webkitTransform = 'rotate('+x+"deg)"; }
<div id='Layer1'> <div id="northDiv"><img src="img/north.png" width="300" height="300" /></div> <div id="oriDiv"><img src="img/compass.png" width="260" height="260" /></div> </div>
<html> <head> <style type="text/css"> #Layer1 { position:absolute; top:20px; z-index:1; } #northDiv { position:absolute; z-index:2; } #oriDiv { position:absolute; top:23px; left:22px; z-index:2; } </style> <script > rexseeOrientation.start(); rexseeDialog.toast('准备启动'); function onOrientationChanged(){ //方向传感器事件,即当方向发生改变时触发的动做 var x = rexseeOrientation.getLastKnownX(); x = 90 - x; document.getElementById('oriDiv').style.webkitTransform = 'rotate('+x+"deg)"; } </script> </head> <body align='center'> <div id='Layer1'> <div id="northDiv"><img src="img/north.png" width="300" height="300" /></div> <div id="oriDiv"><img src="img/compass.png" width="260" height="260" /></div> </div> </body> </html>
本文已经首发于InfoQ中文站,版权全部,如需转载,请务必附带本声明,谢谢。 http://www.infoq.com/cn/minibooks/architect-mar-10-2012