写点什么

基于 Flash 的软件开发

2010 年 5 月 23 日

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

2010 年 5 月 23 日 22:255860

评论

发布
暂无评论
  • 吴磊畅谈 Silverlight 在中国人寿的应用

    InfoQ编辑在QCon北京2010大会期间,采访了中国人寿的技术主管——吴磊,中国人寿基于Silverlight开发了一个企业级应用,他将就RIA技术选型,Silverlight开发实践,Silverlight未来的发展等话题和大家进行交流。

  • 如何使用 Canvas 绘制统计图表(上)?

    Canvas支持2D和3D图像的绘制,并且应用领域非常广泛,基本上涵盖了Web图形/图像、视频、动画等领域。

    2019 年 8 月 22 日

  • 有哪些已经投入生产的 WebAssembly 真实案例?

    在这节课里,我们举了两个比较有代表性、在现实生活中的 Wasm 生产实践案例。

    2020 年 9 月 25 日

  • ChubaoFS:云原生的开源分布式文件系统及应用实践

    随着云原生概念的兴起,越来越多的公司意识到了云原生架构对于基础设施建设带来的巨大收益,开始了应用服务上云的实践。但是,有状态应用需要使用 on-premise 的分布式存储,其 I/O 性能对有状态应用云化提出了很大的挑战。本次演讲将主要介绍云原生的分布式文件系统 ChubaoFS 的整体框架和技术特点,以及 ChubaoFS 在京东是如何支撑大量的有状态应用服务的。 目前,ChubaoFS 的应用场景主要有以下四类:海量数据的离线备份存储;替换传统的分布式文件系统,如 HDFS,CephFS,MooseFS,GlusterFS 等;在线的日志存储服务,如 Nginx logs 等;对于 POSIX 文件系统语义要求较高的应用,如 ElasticSearch,TensorFlow,Spark 等。ChubaoFS的一些设计及经验总结也受到了学术界的认可,论文可参考Haifeng Liu, et al., CFS: A Distributed File System for Large Scale Container Platforms. SIGMOD‘19, June 30-July 5, 2019, Amsterdam, Netherlands。同时,项目代码也已经开源,github.com/chubaofs/chubaofs 。讲师介绍刘硕然,京东技术架构部资深软件开发工程师。有多年文件系统,Linux 内核及分布式存储经验。负责开源分布式文件系统 ChubaoFS 的架构设计及研发。目前 ChubaoFS 在京东已经服务超过 100 个业务方及应用服务。

    2019 年 11 月 21 日

  • 虚拟座谈会:社区开发者谈 Flash 与 Flex 之变

    近期的Flash社区可谓是风生水起,各种传闻,官方消息不约而至,有关Adobe停止手机端浏览器Flash的开发,Flex的开源、还有战略重点也向HTML5、游戏、视频偏移,引起了社区中激烈的讨论。在前不久刚举行完的Adobe After Max采访中,Ben Forta回答了近期技术转型的问题,此外,在Adobe Tea Time中,也邀约了主要技术社区来解答大家对相关信息的疑惑。为此,InfoQ特地邀请到各社区及企业的专家,将以新闻和流言为背景,分别采访了前端开发工程师、新浪视频开发团队负责人、昆仑在线技术负责人、Adobe RIA社区专家、游戏谷研发中心副总裁、Esri公司CTO以及其他社区专家等,尝试让读者从客观、全面的角度来了解这次变化,同时,也希望能为那些在开发和选型中迷茫的读者,提供参考。

  • Adobe 将不再开发移动版 Flash

    Adobe已决定停止开发针对移动设备浏览器上Flash。他们将把重点放在创建本地应用及HTML5应用的工具上来。

  • 正式“退休”的 Flash,未来我们会怀念它吗?

    前几天,我的电脑出现了一次令人迷惑的“行为艺术”。一边是右下角新闻弹窗出现,Win10新版本将完全删除Flash,一边突然弹出来一个更大的窗口,告诉我“您的Flash Player已经更新”,看架势更新之前也没问过我,现在只需要我默认同意使用就行。

    2020 年 10 月 25 日

  • Filtrbox:运用 Flex RIA 技术的语义网应用

    语义网技术和服务在驱动Web迈向下一代(作为数据、信息和知识交换的统一媒介)进程中扮演着核心角色。Filtrobox是语义网应用的一个尝试。InfoQ就此采访了Filtrbox RIA Flex开发人员Justin Imhoff,对该应用所需要的资源和技术做了深入探讨。

  • 用 Microsoft Visual Studio 开发 Flex——Amethyst IDE

    通常,开发者都希望把他们的已有技能应用到新的技术上。Sapphire Steel Software的Amethyst IDE就是这么一种工具,它可以让.Net开发者在其熟悉的Visual Studio环境中开发Adobe Flex或AIR应用。

  • 预习 | Web 前端与可视化到底有什么区别?

    可视化到底是什么?Web前端和可视化的区别?可视化领域中有哪些非常重要的工具?

    2020 年 6 月 22 日

  • 臧否 Silverlight 点燃 RIA 大论争

    RIA工具成为主流技术,开发者的选择也越来越多。Adobe平台传道士Serge Jespers在博客上对Flex和Silverlight进行了对比,并因此引发了激烈的争论。

  • Flash 终将谢幕:微软将于年底停止对 Flash 的支持

    Flash 即将停用,你怎么看?

  • 那些常见的流媒体服务器,你该选择谁?

    SFU已经有很多开源的实现了,比如Licode、Janus-gateway、MediaSoup、Medooze等。

    2019 年 9 月 10 日

  • 第 28 讲 | 热点剖析(一):HTML5 技术是如何取代 Flash 的?

    为什么现在大家都在谈论H5?你真的深入理解了H5吗?H5究竟是什么?它的优点在哪里?

    2018 年 6 月 16 日

  • Flash EOL 将至,WebAssembly 来“续命”

    Flash模拟器Ruffle和x86虚拟化技术CheerpX都利用WebAssembly在浏览器中播放.swf文件。

发现更多内容

Vue+SpringBoot+SpreadJS 实现的在线文档

Geek_Willie

Spring Boot Vue SpreadJS

单核小鸡上的Minikube实践(一)

摩登土狗

Docker Linux DevOps k8s minikube

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

谈谈控制感(7):底线思维与控制感

史方远

职场 心理 成长

Kafka系列第7篇:你必须要知道集群内部工作原理的一些事!

z小赵

大数据 kafka 实时计算

设计模式前传——为什么要学设计模式

海星

Java 面试 设计模式

看得懂的区块链及智能合约概念

石君

区块链 智能合约

东哥和刘亦菲的故事

张利东

R

项目提升服务过程与总结稿

Geek_bc0aff

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

MyBatis支持的jdbcType 枚举类型

Kevin Liao

ZooKeeper,到底如何选主?

奈学教育

产品周刊 | 第 15 期(20200517)

Herbert

产品 设计 产品经理 产品设计

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

golang macos vscode Unit Test debug

NIO看破也说破(四)—— Java的NIO

小眼睛聊技术

Java 学习 开源 架构 后端

换脸新潮流:BIGO风靡全球的人脸风格迁移技术

DT极客

如何更自信的写作

七镜花园-董一凡

写作

重新强调完成的定义

Bob Jiang

Scrum 完成的定义 DoD definition of done

DDD 实践手册(番外篇: 事件风暴-概念)

Joshua

领域驱动设计 DDD 事件风暴 事件驱动 Event Storming

npm下载electron缓慢的问题

玏佾

npm Electron

Spring Security 中的授权操作原来这么简单

江南一点雨

Java spring Spring Boot spring security

给苹果提醒APP配个助手

BabyKing

提醒助手 TODO 奇妙清单 Reminders Helper

识别代码中的坏味道(三)

Page

敏捷开发 面向对象 重构 代码质量 代码坏味道

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

linux文件系统-inode学习整理

戈坞昂

Linux inode

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

Redis缓存三大问题

Bruce Duan

redis 缓存穿透 缓存击穿 缓存雪崩

游戏夜读 | Two Sum问题的八个解

game1night

JAVA主流锁

颇风

Java 多线程

部门最漂亮的妹子离职了

无箭的丘比特

团队管理 生涯规划 企业文化 职场

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

基于Flash的软件开发-InfoQ