开发便携式Tizen应用程序的权威指南
这篇文章补充了在年度Tizen开发者大会和其他地方发表的在线系列讲座。
摘要
本文补充了在年度Tizen开发者大会和其他地方发表的在线系列讲座。这些讲座名为 "JavaScripting Tizen Web Apps "和 "Tizen Application Portability",旨在指导对Tizen感兴趣的开发者,并说明可移植开发策略的好处。
对可用的Tizen API的分析始于对标准和可移植网络技术的考虑。对Tizen架构进行了回顾,并对其网络和本地框架进行了对比,从而检查了Tizen的部署方法,以及它如何影响基于服务器和本地安装的应用程序的网络逻辑和内容。
在评估利用JavaScript库的策略时,提出了一些流行的候选方案。注意到jQuery Mobile的网络框架嵌入版本,以及第三方替代方案,如Sencha Touch、Dojo Mobile和Enyo JS。除了对本地到JavaScript的桥接及其在可移植地使用Tizen设备API方面的潜力进行简短的解释之外,还提供了一些代码样本来说明流行的JavaScript库的效用。
介绍一下Tizen
就移动优化的操作系统而言,Tizen无疑是一个新玩家。这个独特的平台来自三星、英特尔和Linux基金会之间的合作,并打算很快为大量的设备提供动力。据三星称,"我们计划在今年内发布新的、有竞争力的Tizen设备,并将根据市场情况不断扩大阵容"。随着Tizen操作系统和API的成熟,有一点是明确的:Tizen架构师将建立在标准技术上的便携式应用程序的概念放在首位。
在这篇文章中,我们将介绍Tizen API如何支持开发便携式应用的基本情况。无论开发者是使用官方的Tizen软件开发工具包(SDK)还是其他开发工具,为Tizen的网络框架编写的应用程序都可以相对容易地移植到其他平台,利用网络标准。作为一项新兴技术,Tizen将更多地受益于对现有网络应用的移植。
目录
-
图表列表
-
源代码列表
-
便携式开发背后的动机
-
全球的汤
-
Tizen架构
-
供应商和设备领域
-
网络运行时和网络框架
-
WebKit的采用
-
GNU/Linux和资源
-
-
JavaScript库
-
JQuery Mobile
-
触摸
-
Dojo Mobile
-
淘宝网
-
HTML5模板
-
本地到JavaScript的桥梁
-
包装标准
-
存储部署
-
-
Tizen开发工具
-
Tizen集成开发环境
-
Tizen 仿真器
-
Tizen仿真器
-
-
摘要
- 可移植性的好处
-
引用的作品
图表列表
源代码列表
便携式开发背后的动机
虽然开发者和用户都能从能在各种操作系统上运行的应用程序中获益,但有趣的是,那些对Tizen架构影响最大的人重视其便携性,因为未来的Tizen设备会有不同的用户体验。Sunil Saxena说:"Tizen架构的重点是WebAPI,以确保应用程序在不同的架构和不同的配置文件中工作。"这意味着,低功率的导航电脑将执行和显示一个地理应用程序,就像高功率的笔记本或平板电脑一样。可移植的API也能使软件得到重用,这可以大大降低昂贵的工程成本。
在考虑Tizen平台对便携式开发的丰富支持时,重要的是要记住Tizen提供了非标准的但有价值的基础设施。好东西位于POSIX友好的GNU/Linux内核和Tizen框架的夹层之间。也就是说,Enlightenment Foundation Libraries(EFL)不是Qt或Gtk,而是为Tizen提供小工具和支持图形构建块。尽管EFL链接的应用程序使用可移植和标准的ISO C在类似Unix的内核上构建,但期望它们在Windows Phone、iOS或基于Qnx的黑莓10上工作是不合理的,仅举几例。在这篇文章中,我们缩小了可移植应用开发的定义,将注意力集中在JavaScript、CSS和HTML等网络技术上。
全球性的汤
抛开超强的流行语,大多数现代网络应用的开发者都很欣赏HTML5、CSS3、JavaScript和相关网络技术(如XMLHttpRequest(XHR)或各种JavaScript库)的最新进展所提供的丰富功能集。事实上,网络界面是如此的混杂,以至于许多人将这种新的网络汤称为仅仅是由HTML5组成的--更不用说HTML5本身就是一个新兴的标准。
像HTML这样的标准化接口和实现,加速了网络技术的采用,这反过来又加强了促进可移植性的标准(W3C、ECMA、IETC、ISO)。同时,开发社区已经超过了标准制定的速度,这就产生了许多数据库和实用程序,有助于评估标准的符合性、API的采用和网络技术的一般兼容性。一些例子包括:
Tizen架构
Tizen工作组在设计内核、核心、框架和应用层时的既定目标是利用HTML5的强大功能和跨平台灵活性,以增强便携式应用的开发者的能力。"Tizen SDK和API允许开发者使用HTML5和相关的网络技术来编写跨越多个设备领域的应用程序,包括智能手机、平板电脑、智能电视、车载信息娱乐系统和上网本"。[来源]
供应商和设备细分市场
Tizen的构建在不同的设备领域有所不同。供应商可以利用Tizen开发周期的开放性来修改操作系统,以满足他们的需求,几个关键的系统组件的差异证明了这一点。例如,Tizen的官方IVI图像文件将Qt库和EFL一起分发。每个完成的Tizen镜像都聚集了以RPM格式打包的软件,对应于特定的架构(如IA32或ARMv71)和设备段。
统一这些Tizen变体的事实是,它们的组件图像三明治一样排列,应用程序位于框架层上,而框架层又位于核心上。每一层本身就是一个组件的集合,甚至核心也是由Linux内核、设备驱动程序和各种低级API和子系统组成的。
网络运行时和网络框架
最重要的组件之一是Tizen网络运行时,该组件允许网络应用在浏览器之外运行。Tizen用户可以安装和使用网络应用,就像它们是独立的应用程序一样,网络运行时管理着网络应用的生命周期、系统调用、执行、资源、平台整合和访问控制。
与此类似,Web框架将Web Runtime与W3C API、设备API和一个包含源自jQuery Mobile的部件的UI框架聚合在一起。
通过公开标准的W3C和独特的设备API,Tizen为网络应用提供了附加价值,否则只能渲染HTML和执行普通的JavaScript。Tizen W3C API实现了与DOM、样式、设备、图形、媒体、通信、存储、安全、用户界面、性能、位置和小工具有关的网络标准。设备API提供了采用传感器、文件I/O、捕获、电话、FM广播、语音识别和HDMI输出的高级逻辑。
采用WebKit
为了渲染网页内容,Tizen Web Runtime采用了WebKit布局引擎,这与Android、Chrome、Safari、MeeGo、Qt以及其他一些依赖WebKit的项目类似。当选择一个JavaScript库时,需要考虑的是对WebKit的支持,以及对所开发的软件应该在哪个引擎上进行移植的支持。
GNU/Linux和资源
Tizen的GNU/Linux内核和其他资源是完整的、在线的、可公开访问的,而不是通过发布内核和libc的二进制文件而模糊了自由许可的界限。任何开发者都可以从这些源码中提取一份副本,并建立他们自己的Tizen镜像[源码],以备安装到硬件上。安装后,Tizen由U-Boot引导加载器引导,就像许多低功耗或嵌入式系统一样。
JavaScript库
为了最大限度地提高可移植性,我们专注于依赖网络框架的Tizen开发模式。正是这种模式最大限度地减少了系统的依赖性,并赋予了应用程序中的开发远景。
尽管Tizen Web框架包含了一个自定义主题的JQuery Mobile安装,但竞争的Web框架并不仅仅对移植现有的应用程序有用。相反,当利用已经熟悉Dojo的开发人员的技能,需要Sencha Touch闻名的复杂的微调JavaScript操作,或者只是重复使用在Enyo JS等前期JavaScript库中编写的代码时,它们也非常适合原始Tizen开发。
JQuery Mobile
这是为数不多的支持Webkit渲染的库之一。事实上,jQuery Mobile也支持WebKit、Gecko(Mozilla)、Presto(Opera)和Trident(Microsoft)引擎。有了对兼容性的如此关注,Tizen已经享有A级的支持也就不足为奇了,它具有完全增强的体验和基于异步JavaScript和XML(AJAX)的动画页面转换[来源]。在开发Tizen网络应用与Mozilla的Firefox OS或微软的Windows Phone进行移植时,这种兼容性因素是一种优势。
<head>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.css" />
<script src="//code.jquery.com/jquery-1.8.2.js"></script>
<script src="//code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.js"></script>
<body>
<div data-role="page" id="firstpage">
<div data-role="header">
<h1>Nice header</h1>
</div>
<div data-role="content">
<p>I'm the first page. Click for <a href="#secondpage">Second page</a></p>
</div>
</div>
<div data-role="page" id="secondpage">
<div data-role="content">
<p>I'm the second page. Click for <a href="#firstpage">First page</a></p>
</div>
</div>
</body>
清单1:使用jQuery Mobile和多页面封装的声明式编程
jQuery Mobile最独特的功能是它对声明式编程范式的适应,最适合那些熟悉静态网页的人。它在解析静态HTML时巧妙地重新排列DOM,避免了页面的HTTP往返和页面刷新,而不需要开发者的干预。
Sencha Touch
这个流行的JavaScript库与声明式的替代品不同,它的结构性几乎只用JavaScript来工作。典型的Sencha Touch应用程序,目录索引(index.html)看起来是空的,实际上只是作为JavaScript逻辑的启动加载器,反过来动态地建立文档对象模型(DOM)。
用户的浏览器窗口布局是通过向Sencha Touch库提供JavaScript代码和JSON数据来构建的,该库在决定如何构建视图时使用这些数据。这种优雅的方法有它的优点,但涉及到比jQuery Mobile更陡峭的学习曲线。
<!DOCTYPE html>
<html>
<head>
<title>Simple Sencha</title>
<link rel="stylesheet" href="//cdn.sencha.com/touch/sencha-touch-2.1.1/resources/css/sencha-touch.css" />
<script src="//cdn.sencha.com/touch/sencha-touch-2.1.1/sencha-touch.js"></script>
<script src="app.js"></script>
</head>
<body>
<!-- Nothing here! -->
</body>
</html>
清单2:一个完整的Sencha Touch index.html,甚至适用于大型项目
用Sencha构建的Web应用程序的入口点是Sencha逻辑在加载库时触发的启动事件的处理程序。这段代码和其他代码中大量的Ext关键词揭示了这个架构是从历史上重要的Sencha ExtJS库演变而来的。
Ext.application({
launch: function() {
alert('App launched!');
}
});
清单3:实现Sencha Touch应用程序的入口点
Sencha Touch最近的发展导致了一个重要的版本,通常以其主版本2[Sencha01]来称呼。增加了一些内容,包括在iOS和Android上的一些本地到JavaScript的桥接,以及产生相应的本地包的构建基础设施。不幸的是,这些对Tizen来说都是无用的,除非Sencha超越以Android/iOS为中心的支持模式。
Dojo Mobile
Dojo Mobile库与jQuery Mobile类似,它的尖端移动和触摸专用逻辑扩展了JavaScript Dojo Toolkit库的成熟核心。它允许开发者通过解析简单的HTML对DOM进行声明式编程,并通过与jQuery Mobile类似的XHR自动处理页面数据,以执行流畅的页面转换和效果。但Dojo Mobile的独特之处在于提供了一个模块化的加载机制,并将其JavaScript库捆绑在模块中分发,这些模块实现了负责数据抽象和DOM操作的Dojo APIs。它在设计上结合了国际化(i18n)组件,并在数据与控制流的抽象方面提供了很多。Dojo Mobile最适合iOS、Android和黑莓的外观和感觉,但它的小部件主题适应性足够灵活,使Dojo Mobile与其他竞争的便携式JavaScript库一样,用于Tizen网络应用程序开发。
<!DOCTYPE html>
<html>
<head>
<title>Our Dojo Test</title>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js"></script>
<script>
require([
"dojox/mobile/parser",
"dojox/mobile",
"dojox/mobile/deviceTheme"],
function(parser) {
parser.parse();
});
</script>
</head>
<body>
<div id="settings" data-dojo-type="dojox.mobile.View">
<h1 data-dojo-type="dojox.mobile.Heading">Tizen App with Dojo Mobile</h1>
</div>
</body>
</html>
清单4:一个完全由index.html实现的小型Dojo Mobile应用
Enyo JS
Enyo JS的核心是一个简单而强大的封装模型,它有助于将应用程序的功能纳入易于重复使用和维护的独立构建块中[来源]。这个库的一个吸引人的因素是它在大量的网络应用中的广泛使用,无论是新的还是旧的。Enyo当然也从基于Linux的WebOS与历史上的Palm和HP设备的广泛传播中获益,在这些设备中,Enyo被用作主要的网络框架。
<!DOCTYPE html>
<html>
<head>
<title>Our Enyo Test</title>
<link rel="stylesheet" href="//enyojs.com/enyo-2.2.0/enyo.css" />
<script src="//enyojs.com/enyo-2.2.0/enyo.js"></script>
</head>
<body>
<script>
new enyo.Control({content: "Hello From Enyo"}).renderInto(document.body);
</script>
</body>
</html>
清单 5:一个完全由 index.html 实现的小型 Enyo JS 应用程序。
HTML5模板
尽管在SDK 2.0版本中删除了用于HTML5 Boilerplate项目的Tizen IDE模板,但HTML5 Boilerplate仍值得关注,因为它提供了实用性,并在开发人员中得到了广泛的支持。HTML5 Boilerplate的交付物可以很容易地与Tizen IDE中的任何Web应用项目模板合并,如果明智地使用,它可以加速大多数Web应用早期阶段常见的逻辑开发。在HTML5模板中,特别值得关注的是提供Modernizr浏览器检测和Normalize CSS一致性逻辑。其他模板文件与Apache、自定义404页面、跨域、机器人指标和图标有关。
本地到JavaScript的桥梁
某些Tizen APIs(甚至在Web框架中)的特点是进入了负责时间、设置、连接、联系人、设备、文件、媒体、通知、存储、事件、相机和捕获等组件的不可移植结构。采用任何这些API都会降低相关应用程序的可移植性。为了重新获得失去的跨平台可移植性,了解一下为混合应用程序实现本地到JavaScript桥接技术的项目是很好的。
这种可移植性框架暴露了一组JavaScript API,允许开发者访问本地设备功能,如相机操作或加速度计检测。与jQuery Mobile、Dojo Mobile或Sencha Touch等UI框架相结合,这使得智能手机应用可以只用HTML、CSS和JavaScript来开发。
没有多少其他竞争性的混合JavaScript框架,但Appcelerator的Titanium品牌工具正在被移植以支持Tizen的API。
打包标准
Tizen网络应用程序是根据W3C小部件打包规范打包的,正如批发应用社区(WAC)所规定的那样。
存储部署
尽管如此,包只是部署策略的一部分。经过许多猜测,官方Tizen商店在2013年世界移动大会期间被提及,但没有基础设施或API的细节。由于这项技术还没有正式发布,目前,软件包必须以传统的方式消费,或者利用一些竞争但兼容的第三方网络应用服务器中的任何一个,提供类似商店的体验:
Tizen开发工具
Tizen SDK是一套全面的工具,用于开发Web应用、本地应用和Tizen的平台组件。它包含一个安装管理器、集成开发环境、工具、文档、样本和一个平台图像[来源]。一旦安装,其逻辑文件层次结构包括ide、安装管理器、库、平台和工具。
Tizen集成开发环境
Tizen集成开发环境(IDE)是一个源自Eclipse的程序,所以它需要一个Java运行时才能工作。由于Eclipse核心提供了大量的定制功能,并利用Java API来实现,因此涉及到一些特殊的要求。与Java理论上的可移植性相反,在使用OpenJDK和其他替代的Java环境时出现了问题。特别是,需要Oracle的Java v6 JDK(不是JRE)或更高版本。
无论安装要求如何,Tizen SDK的开发者都明智地选择了Eclipse IDE。它提供了插件基础设施,支持生成证书、事件注入、验证代码、打包应用程序和其他活动的舒适方法。
其他重要的Tizen SDK交付品包括Tizen模拟器和仿真器。虽然这些工具内部不同,但它们在模仿操作系统的运行时行为方面执行类似的职责。
Tizen 仿真器
Tizen模拟器使用QEMU机器模拟器和虚拟化器,当主机系统(使用KVM或HAX)和硬件支持时,为开发者提供一个完整的硬件和GPU(GLES)加速的环境。仿真器运行后会出现一些方便的选项,以实现屏幕旋转和缩放、屏幕截图操作、主机键盘输入捕捉、RAM转储诊断和Shell访问。仿真器还能额外地对Tizen IDE或SDB(如下所述)注入的系统事件(电池、耳孔、USB、接收信号强度指示、SD卡、地理位置、NFC、加速度计、语音和文本电话、光、运动和接近传感器)进行现场测试,以达到高度的广泛测试。
Tizen模拟器
Tizen SDK开发者已经发布了一个特殊的基于网络的测试设施,称为Tizen模拟器。然而,这个模拟器不是一个独立的软件,而是一个有趣的Apache Ripple网络运行时模拟器的混合体,已经被Cordova[source]、WAC和WebWorks等团体使用。Ripple也不是一个二进制文件。相反,它本身就是一个网络应用,通过启动网络浏览器和加载标准网络逻辑来启动。为了减轻XHR交叉和空源访问的问题,Tizen模拟器对所安装的主机网络浏览器进行了假设,要求通过硬编码启动参数,如 "允许从文件中访问 "和 "禁用网络安全",来实现谷歌Chromium或Chrome。
关于Tizen模拟器和仿真器,发布工程师在描述其仿真和模拟性质时对这些工具进行了正确命名。由此可见,Tizen模拟器不包括自己的内核,根本不暴露任何API,对于测试驱动程序、安全、原始图形和任何类型的原生开发都是无用的。但是在扔掉这块东西之前,有一点很重要:在测试网络应用时,Tizen模拟器是无价之宝,它可以从快速编辑和测试解释周期中获益。
Tizen SDK中包含了一些便利工具以及性能提升的诊断工具。软件设计师和图形工具爱好者特别感兴趣的是UI Builder、UI Effect Builder和动态分析器。
总结
虽然移动策略中对网络和原生应用开发的比较是假定相互排斥的API,但Tizen提供了一个独特的网络框架,为两个世界的元素服务。网络应用可以利用这一点,从功能完整和基于标准的可移植开发中获益。由于这些原因,为Tizen和其他移动平台学习网络应用程序开发的绳索是有意义的。