这里所提及的 Flash 技术,包括 Adobe 的 Flash Player 以及 AIR。基于 Flash 的软件开发,涉及的人比较少——更多的人或许认为 Flash 更适合做在线产品,比如 Media Player、Data Show 等等。其实做软件开发也是一样,只要 Flash 适合你的产品,为何不抛开传统的开发理念而采用 Flash 呢?
本文根据自己开发维护 DoSWF(详细信息请查看: http://www.doswf.org )的经验,对基于 Flash 的软件开发,做一个全面的解剖。
为什么要基于 Flash 做软件开发
- 强大 UI 处理、交互设计功能:借助于 Flash IDE 以及 Flex Builder,可以让你的软件的 UI 展现、用户体验完成得非常出色。
- 跨平台:Adobe 已经为跨平台做了很多工作了,包括 Flash Player 以及 AIR 的部署。这让你的软件更便捷的做跨平台分发。
- Online 和 Client 完美结合:传统的软件开发模式,更多的是面向客户端,如果要和在线端结合的话,还得重新做在线版(浏览器插件之类)。而基于 Flash 开发则完全可以将 Online 版本发布为 Flash Player 平台,而 Client 版本发布为 AIR 平台,将二者完美结合。
- 丰富的第三方产品支持:很多时候你会发现,Flash 几乎能完成你的软件所有的功能,但是就是有一个关键的功能实现不了,比如调节系统音量功能——AIR 也不能实现!这个时候,你就得善用 Flash 的第三方产品。最常见的就是 Flash 打包工具了。很多打包工具提供了很全面的系统级别接口供 flash 来调用。比如 ZINC,Flash Packer,都是非常不错的打包工具。借助于这些优秀的第三方产品,你可以将 Flash 技术应用到一个更高的境界。
Flash 能做什么
和传统的软件开发技术不一样的是,相对来说 Flash 能做的实在是太少了。Flash 从一开始就依附于浏览器,就注定它要在安全方面如履薄冰。从最简单的 Actionscript 1.0,到 Actionscript 2.0,再到目前相对比较强大的 Actionscript 3.0,虽然说目前用 Flash 我们能做越来越多的事了,但因为安全问题,Flash 仍然有很多事不能做。就算是 Adobe 后来推出的 AIR 技术,也无法完全跨越安全的限制。
所以在你确定要使用 Flash 技术进行软件开发前,你必须要知道 Flash 什么不能做,什么能做。这样你才能知道 Flash 技术是否适合在你的产品上使用。比如你要开发一个杀毒软件,Flash 能做吗?显然不能。但是如果你要开发一个 RSS 订阅器,这个完全则可以实现。所以,如果有必要,请事先咨询一些 Flash 开发人员,他们更清楚 Flash 的优势和劣势,更清楚你的产品是否适合使用 Flash 技术。
怎样基于 Flash 开发软件
产品架构
既然我们使用 Flash 来开发我们的软件,那么我们在架构产品时就应该更多的让 Flash 来发挥它的优势:跨平台性,以及 Online Application 和 Client 完美结合。这里看一下 DoSWF 设计初的产品架构:
产品分三条主线分发:
- 借助于浏览器,通过 Flash Player 的跨平台特性以及其高安装率分发软件的在线版本。
- 通过打包工具,将软件打包成客户端程序。选择不同的打包工具会有不同的目标平台。这里仅打包 Windows 平台可执行程序。
- 借助于 Adobe AIR 的跨平台性,将软件发布 AIR 版本,实现客户端的跨平台。
不难看出,基于 Flash 的软件开发,在跨平台上的分发上,比传统的软件开发方式就存在很大优势。更特别的是借助于浏览器,以及 Flash Player 的高安装率,可以通过发布在线版本(如果功能上可以的话,比如你的软件是一个聊天软件),让你的产品更快更便捷地呈现给用户,服务于用户。
功能开发
Adobe Flash 系列产品,包括 Flash IDE, Flex, Flex Builder, Flash Player, AIR。借助于这些优秀的软件,你可以很方便很快捷地进行功能开发。
1. 环境编译
很多时候你的软件要发布成不同的版本,比如一个用于在线发布,一个用于打包成 exe 发布,而另一个用于发布成 AIR 程序。每个版本所对应的接口是完全不一样的。你不可能每个版本都开发一次吧? 抑或是将软件模型提取出来,接口调用再各写一份?这样能解决问题,但是在后期的版本维护中,你会发现版本非常混乱。
最好的解决方案就是使用环境编译(详细信息请查看官方帮助)。它容许你在编译时有条件的选择相应的代码编译。比如:
2. 换肤以及多语言
Flash 生来就是做 UI 的,这是 C、Java 等传统软件开发模式所不能比拟的。特别是借助于 Flex Framework,里面内置了很丰富的组件,使开发人员完全可以从 UI 处理中脱离出来,进而更关注软件的核心实现。通过 Flex Framework,可以很方便的完成换肤以及多语言支持。
在我看来,开发 Web 游戏,或在线应用,是否使用 Flex Framework 确实需要很好的斟酌一下。但是如果是进行软件开发,完全可以尝试一下——你不需要考虑它的体积(几百 KB 而已),也不需要考虑它的效率(比起你程序核心的消耗,它将会是很低的)。当然了,如果你的程序有发布在线版本的计划,如果在浏览器中运行效果不是很尽如人意,可以考虑将在线版本发布成一个 Demo 版本。
3. 自动升级
这个是软件开发必须面对的一个问题。Adobe AIR 目前的版本已经集成了自动升级模块。如果你的程序发布成 AIR 版本的话,可以很方便地完成自动升级的开发。但是发布成另外的版本,比如 Windows 的 exe 版本,就得自己去架构自动升级模块了。需要说明的是,最好是复用 AIR 升级模块的 xml 文件格式,不然维护这个升级文件会很复杂。
商业应用
这个是所有商业软件需要面对的一个问题。最最基本的模式就是出售授权来获取商业利益;如果再高级一点,就是提供商业性质的服务——比如顾问、软件定制等等。这些都不是重点,而且我确实没有深入研究。但是当你的软件发展到一定阶段的时候,我个人认为有一个东西就应该考虑了:产品系列化。
像 DoSWF,之前只有一个 Professional 版本,慢慢我发现很多人只用里面最最核心的几个功能,其他功能他们根本用不着,而且也不知道怎么用——并不是每个人都很熟悉你软件所涉及的领域。于是后来我把 DoSWF 里面最核心的功能提取出来,发布了 DoSWF MINI 版本,这样用户完全从 DoSWF Professional“混乱”的功能中脱离出来,而且费用更低。再到后来,我发现 DoSWF 不能满足用户针对项目的需求,于是又有了 FPE(Flash Project Encrypter)。这就是产品的系列化。
在软件一开始你可能会对整个产品用户有一个很准确地把控。但是实践会告诉你,你的用户远远超出你的想象。所以,产品的系列化是产品发展中一个很重要的环节,同时也意味着你要去做数据统计、分析,然后重新审视你的用户群体。这些就不只是针对基于 Flash 软件开发而言了。补充一点,如果你的程序发布成 AIR 版本后,可以将软件发布到 Adobe 的 AIR Market。
总结
做软件即做产品,是一个很深很广的领域,这里只是对基于 Flash 的软件开发做一个抛砖引玉。很多产品,换一种思维,换一种方式,突破传统的束缚,你会有一个更新更广的天地。
作者简介:陈了然,网名 laan,2004 年接触 Flash,入门较晚,倍感压力。08 年开始研究 Flash 加密与混淆,并自主开发一款 Flash 加密软件。曾就职于 sina 事业产品部,以及 sohu 研发中心。现就职在百度 Flash 开发组。个人技术博客: http://www.laaan.cn/ 。
本文已被收录在《架构师》(5 月刊)。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论