BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

基于Flash的软件开发

| 作者 陈了然 关注 0 他的粉丝 发布于 2010年5月25日. 估计阅读时间: 9 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

这里所提及的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中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT