FB LIKE JACKER

【开发教程连载】第一章第三讲:让我们来看看webOS和Mojo

2011 年Mar月 11 日由 发布 | 类别: 其他 | Tags:

本讲我们主要看看Mojo和webOS以及它们之间的一些关系,为下几章开始简单的创建webOS小程序做准备。

Palm和Mojo

当你写一个关于webos的应用程序,你会被告知什么是mojo框架。与大多数其他的智能手机一样,你通过操作系统提供的API接口来编写程序的,有时候甚至通过汇编语言来编写。最常见的是通过C 或C++语言(JAVA是另一个选择,虽然它跟webOS的关系更加接近,但它不是最常用的。)然而,一个webos的应用程序,与其他手机应用程序不同的是,它本质上是完全基于web浏览器运行的。(更确切的说,palm的程序在运行时,是建立在浏览器引擎之上,与safari和其他的浏览器的动力引擎一样)。现在,你在看着它的时候不会知道它是基于web浏览器,因为操作系统本身就是一个浏览器,并把那些程序界面隐藏在里面(即你不会发现典型的浏览器的特征比如地址栏、按钮和工具条等等),但是它的确就是基于浏览器的,这就是为什么你要基于HTML,CSS和JAVA来编写webos的程序的原因了,就像设计网页一样。

Mojo实际上是你和webos之间的一个JS函数库,这是一个可以提供你访问底层代码和和脚本的一个API接口,并且给了你一个简单统一的方式来利用里面已经封装好的函数来开发软件。

Mojo框架分为三部分:API接口,服务和小工具:

  1. API是各种你可以利用进行编译的的java脚本的功能,他们在java的包中,进行多种的分类,而且非常有用,这是一种普遍的组织结构,允许你的各种功能共同合作并合乎逻辑。
  2. 服务,我们将会进行深入讨论。本质上是本地服务能够让你访问基于Ajax框架技术开发的技术,能够让你访问pre底层的特征(比如媒体播放和运行一个浏览器)。起先,你可能觉得这个方法会使使用服务是变慢,但是实际上,基于网络服务的应用服务会与你的程序结合,即使你看不出来。区别是,服务都是在本地设备设备上运行,与你的引用程序结合起来,因此没有任何的网络延迟,并且这是在操作系统水平上完成,使得整件事情的效率与其他的掌上设备本地服务的效率是一样的。
  3. 小工具是用来完善UI必备的元素,是你可以用它来开发建立程序。你可以仅仅利用palm CSS java脚本 和HTML 就能够开发一个完全的webos应用程序。

Mojo,作为一个适当的框架,不仅仅提供所谓的API,它还提供了你的应用程序的原型结构参照,大多数的webos应用围绕着协议来展开,也就是说,只要你遵循一定的指导,结构建议,将会只需要更少的代码,因为mojo知道怎么样确切运行你的程序。它减少了大量的代码输入工序,这对于我们这些懒的开发者来说十分不错!

Webos的应用程序结构建立在著名的MVC软件模型之上,它可以把问题分离开来加以关注。主要是三个部分,负责显示信息的部分,负责各潜在逻辑应用的实施部分,负责应用程序数据的处理部分。默认的结构图中你可以编码的部分组成了你的应用,你可以遵循路径,mojo就知道怎样寻找你的应用并怎么使用它。

1-15 . MVC

Mojo的标准目录结构

图1-16展示了你的应用应该跟随的基本结构目录。这是最基本的目录结构,绝大多数的webos应用是这样(就像所谓的规则,可能会有打破的时候,但是基本上很少,假如你跟随了webos的基本结构)。

1-16 . 目录结构

在破解权限的目录下你可以找到这些文件:

  • ※     index.html ,这是你的HTML文件
  • ※     source.json,列出了所有组成你的应用的的java脚本文件,这是必需的
  • ※     appinfo.json,这是一个阐释你的应用给mojo的一些信息文件(其中你能做的一件事是指定HTML文件的名字,因此index.html就不会一直纠错下去)。
  • ※     icon.png代表你应用程序的图标

我们接下来将深入了解这几个方面,但是现在,作为概要已经足够了。

在根目录,你还能找到一些应用程序目录,这就是你的应用程序代码所在的地方。

作为一个网络应用程序,你需要图像,脚本,和样式表,并按照协议你会发现他们在根目录里叫做images javascripts和stylesheets,这本身不是必须的结构。当你对这些源文件进行更改时,你的应用不会失败,但是会有一个提示你是否继续这么做的提醒,这很有意义,可以使应用程序的结构对大多数人来说变得更加简单。

在这个应用程序目录,你可以找到一些子目录,比如assitants,models,和views,这个assitants目录里包含了控制画面的java脚本文件,views文件里包含了一些画面的HTML文件。Models目录一般很少用到,但是是应用程序的数据文件所在的地方。

早些时候我提到过,应用程序的一部分基本文件添加到了基本结构目录之中,其中以views文件和assitants文件为主。在我们真正讨论这些之前,我们需要了解两个基本概念:stages和scenes。

※     注意:应用程序的结构是推荐的,但是不是必需的。必须的是应用程序的根目录并包含了程序信息和页面文件,当然在推荐结构之外任何增加的内容也是可以的,只要你需要。

页面

页面是你的应用程序的舞台。就像你的浏览器的工具条用来装网址的地方。一个页面以卡片的形式展现出来,并且如果需要的话一个应用程序可以有多个平台或者卡片,但是一个通常足够(在我与webos的工作时,我从来没有见到过需要多个的例子)。

一个页面也就是HTML,就像你的应用程序的基础文档,HTML文件通常是很少的,你会看到本书中大多数的时间没有介绍它,绝大多数的时候用户是不需要看到它。页面通常是空的,应为这是绝大多数的应用发生的地方。接下来你可以看到一个典型的应用,有一个单个的HTML文件装载并在页面上生效。实际上你可以构建整个webos的应用仅仅需要一个HTML文件。但是这是一个非常典型的例子,通常场景会被用来展示你的应用程序。

卡片

一个scene是你的应用程序的视图,就像一个卡片,它建立在HTML文件之上(更确切的说,这是一个HTMl的不完整部分),但是这个文件被称为scene assistant。这只是一个java脚本的对象,用来控制场景。Mojo会自动控制场景,但是更多的功能由assitant来提供。

记得MVC吗,HTML文件是你看到的场景,而scene assistant是你的控制器(尽管不是真正的控制器),这个模型会储存一些数据到本地的文件或者由远程系统来提供数据。甚至你在所有的情况下不需要这个模型

HTML文件构成的一个场景实际上是HTML的片段,这意味着并不是完全具有首尾的文档。比如,这是一个完全有效的场景HTML文件:

Here is a button:

<br>

<div x-mojo-element=”Button”></div>

我不想仅仅我一个人懂的这里,但是我必须得指出:你有没有注意到x-mojo-element属性?很明显这不是标准的HTMl标签。这实际上是mojo来解析你的场景和HTML并转化<div>为按钮工具的一个标记。这是你经常要打开的几面,你可以看到,这让你的视野非常好的和其它层次分离开来,并拥有良好的MVC结构。

那么,当你回到场景,一个应用程序起码需要一个场景,大多数的应用程序可能需要更多。你可以在理论上考虑一个多个场景的网页,用户可以在其之间拥有向导。如果你喜欢,可以把stage考虑为windows或者mac的电脑桌面,唯一的区别是工作的方式,在你的windows桌面只有最大化,移动在另一个意味着将离开你正在看的。

场景堆栈

当用户由一个场景切换到另一个,先前的场景不会丢失。每个新的场景出现时,会被推到一个叠加的场景。先前的场景会在现在的下面。如果一个场景关闭了,先前的场景就会在堆栈中重新出现。这和导航网站的前进后退类似。

你的应用程序的代码间接上负责了程序的堆栈,你可以关闭当前的场景来显示之前的场景。你也可以使用手势区返回来切换到另一个场景。Webos确实做到了堆栈,你不需要自己来堆栈他,你只需要告诉webos,你想要一个新的场景,堆栈就会自动进行。

应用程序

我将要做一个陈述,我认为注定要载入史册的是你可以在手机上安装你的应用程序。这是应用程序的一部分,当然,你可以说这是非常重要的一个步骤,你只需要通过到palm app catalog下载安装就可以。在图1-17可以看到,这是一个在线的商店你可以打开页面并下载购买webos的应用。当你选择了一个应用,它会自动下载并且安装到你的程序页面。这非常简单!

1-17 . 应用程序商店

“这就是文件中说的,但是实际上我看到了并将只有一个场景的应用程序汇集到了一起,你会看到一些警告信息在你的日志文件中,但是应用程序仍然会工作”

一旦你安装了一个程序,mojo和webos会提供给应用程序一个众所周知的运行周期和一连串的事件,第一步是mojo会阅读appinfo.json文件。提供给了系统应用程序的直观信息。

其次,应用程序管理会运行,根据你的应用程序提供的嬉戏。这是一个java的脚本,你可以将参数传递给应用程序 运行 和设置应用程序,你通常不需要程序的帮助,因此是可选择的。

Appinfo.json文件的一部分有HTML文件提供的应用程序启动点,典型的即index.html。其次,这个文档会被载入与分析。任何样式表和java脚本文件参考的HTML文件将会被载入并分析完毕。这些HTML文件负责加载mojo本身并且在没有运行场景时作为默认的场景。

自制程序:在边缘生存

Palm已经走上了和苹果相同的道路,有一个在线的商店,app catalog,。这是你主要的获取应用到你的pre和webos设备的途径。

但是,这不是唯一的方法。

一个自制的获取的应用程序的应用已经产生,你可以不通过app catalog来获取webos的应用,自制的应用程序集合由pre爱好者提供,不是palm。

现在 ,一切听上去都还不错。但是你得意识到几个重要的负面影响。首先,这不是palm认可的,目前为止,palm对这个问题保持沉默。并没有采取措施来制止它。但是不是一直这样下去,我们现在还不知道。然而,我听说了一个谣言,palm将要翻出一个官方的应用来安装独立的程序,这已经是一个homebrew软件的不言而喻的认可了。我希望确实如此。

或许最大的负面影响是和官方的app catalog。你所有的找的程序会经过严密的审核才能进入商店。Palm保证了程序不会毁了你的设备。但是homebrew中的软件并没有,因此存在着风险,我们并不惊奇homebrew中的软件没有条约存在。

然而,其中让微软这些年如此成功的原因是有很好的开发者和并允许他们在微软的平台上开发程序。这正是homebrew正在做的。我希望,尽管palm官方没有正式赞同这个程序,至少允许他的存在。到目前为止,一切都还好,但在palm官方给出明确的答复之前,我们尚未确实。

请注意,我没有给你们任何homebrew的信息,比如如何去获取程序,这是故意的,如果你选择了这个程序,你需要自己寻找方法去使用它。因此我不会感觉糟糕如果你毁了你的新pre!当然,找到homebrew是非常简单的事情如果有google的话。

开始webOS的开发

我会为webos的程序的开发付多少钱? 简而言之,webos的开发是非常简单的。或者更便宜,因为他是百分之百的免费!

Palm已经翻出了软件开发工具的SDK,它包含了几乎所有你需要的来编写和运行webos程序的文件。我说几乎是因为你还需要安装java6和virtuabox。

你首先需要安装java6,你可以在http//java.sun.com下载。选取最新的版本装载你的平台,windows的各种版本,包括mac。

整本书中我会讲到windows平台 的开发,因为这是我最了解的。同时,我会尽量不会遗漏任何重要的信息并提供建议给大家。

一旦你安装了java,接下来该安装virtualbox,这是一个32位的sun安装包,你可以在virtuaIbox的官网下载。换句话说,它让你运行一个虚拟机,即webos。它可以很好的模拟Pre的所有功能,让你在上面运行和开发软件,就像你手里确实有一个Pre一样。

安装了java和virtualbox是非常简单的,按照提示来安装就行。

最后需要的是webos的SDK,palm的官网是个不错的地方,如果你英语过关的话,在那里你可以方便的下载所有的webos环境。在那里,你能够找到信息论坛并与其他开发者交流,有关于mojo的文件,关于webos发展的文章等等。你需要注册一个账号来下载SDk并浏览网站的关于webos的信息。

SDK也是非常简单能够安装。当这完成,一切都准备好了。

SDk包括了一个webos的模拟器,在图1-18中可以看到。在那个窗口中,你可以看到操作系统的启动,linux的基础是可用的。一旦顺利启动后,你可以看到一个一个屏幕显示weos界面,你可以安装和运行任何一个自带应用程序。你也可以通过电脑的网络来使用浏览器。

1-18 . 虚拟机启动界面

适当的IDE让事情变得更简单

尽管SDK,java,virtualbox是你必须装的,还有跟好的办法让东西变得简单。这就是一个继承了开发环境的IDE,同样在PDN上你可以找到一个IDE的插件,这使我极力推荐的。

你需要安装一个Ecilipse先,你可以在http//www.ecilipse.org上下载,这是一个非常简单的安装程序,当你安装后,你需要遵循PDN的指示来安装插件。

这个插件的主要作用是为你创造一个新的webos应用框架,你只需要点击几个按钮,也可以很简单的点击别的按钮在模拟器上运行这个程序,这是另一种互动SDK的方法,这也是许多人喜欢的方法。

注意:这本书中,我假设你已经安装了Ecilipse和插件,我只是描述这个方法。我这样做是因为这是很简单的方法,其次,已经有许多其他与SDK互动的方法,但是IDE方法却没有,所以我觉得提供这个渠道可以增多webos的开发途径。

我已经提到过,只需要点一个按钮就能运行一个应用程序,通过Eclipse和插件,简单的创造一个应用程序,这就我们接下来要做的。

————————————————————————————————————————————————–

翻译不足,欢迎指正!

下一讲:webOS开发环境配置        预计发布日期:2.11.3.12


译者:areskobe

PhoneKr出品

« 我用NEXUS ONE换了个Pre 2,值!
[Motorola Defy] Pays-ROM Defy v4.0 Froyo with Ginger feeling [3.4.2-155-2 based!] »

About QiiQiii

» has written 12 posts

  • jackjiang

    您好,文章翻译的内容里Java脚本应该直接就用javascript,js跟java不一样

    • webOS新闻组

      谢谢建议,我会尽快和原作者联系!

  • slipknot_0

    好好学习!

锋客的朋友们

  • 少数派
  • 煮机网

签订契约成为机油吧!

Buy me a coffee~ ;-)

Buy me a coffee~ ;-)
閃開│讓專業的來 沒辦法│我這個人就是太正直了