如果您想阅读下面的内容,我写了很多,但如果不想看,对不起浪费您宝贵的字节 :) 我先直接回答上面的问题:
为什么会这样?
这是一个令人困惑的问题,请继续阅读下面的详细信息。
也许他们的意思是Flex不能“开箱即用”,需要插件吗?
还是他们的意思是根本无法运行?
使用Flash Builder工具(SDK中的bin文件夹),可以编译成原生桌面应用程序、桌面Web浏览器、原生iOS应用程序、原生Android应用程序。安装了FlashPlayer插件的Android会在Web浏览器中显示Flash内容,iOS只能运行使用AIR编译的应用程序,不能在Web浏览器中运行,但可以作为本地应用程序运行。
每当我认为我已经得出了明确的结论时,SlashDot或CNET上的某些帖子就直接反驳了我的结论。那么真相是什么?可以将现有的Flex应用程序运行在iOS/Android上吗?
是的,如果使用AIR,并在所有三个平台上作为本地应用程序运行(桌面Flex API大部分是Web Flex API的超集),您提到的性能和形式因素是有效的,并且应该被考虑。好处是,您可以在AS3中编写通用库中的模型/控制器代码,然后编写共享该库的单独的演示层接口。
以下是非常详细的版本:
使用Flash编译器会生成“字节码”,以swf格式的文件形式存在,您可以在此处阅读更多相关信息:
http://www.adobe.com/devnet/swf.html
要解释该文件,您需要某种类似于在.NET框架上下文中运行WPF/XAML/C#的运行时(无论是桌面还是在Web上使用Silverlight)。在Adobe技术的情况下(粗略等价):
- AS3 = C#
- MXML = XAML
- Flex = WPF+WCF(客户端RPC而不是服务器端)
- Flash Player = Silverlight
- AIR(Adobe集成运行时)= .NET
框架可重定向的.dll(或.so)文件,适用于桌面操作系统
(请非常宽松地阅读此列表,请注意MXML编译为AS3,仅当编译器上设置调试标志时才包括调试符号,肯定存在许多差异,但我认为这是一个易于使用和正确的模型)
在iOS上,浏览器不允许传统意义上的netscape浏览器插件或ActiveX插件。因此,您将无法在浏览器中执行插件,例如flashplayer或silverlight。尽管Adobe发布了适用于Android设备的flashplayer,但它只能在该设备的浏览器中运行。然而,他们已经基本放弃长期支持此功能,因为他们必须支持绝大多数移动设备平台iOS,以保持相关性(我认为这更像是Google、设备制造商、运营商、微软的集体放弃,所有人都跟着做出最好的商业决策,WebKit和V8或SpiderMonkey可能可以完成99%的Flash工作,并在某些情况下做得更好,希望WebKit不会分裂并保持开源...框架和浏览器只需要得到完善和稳定)。
如果用户安装了AIR(或运行时与应用程序打包),则Flex / Flash(即使用AS3和/或MXML编写并编译为swf的内容)可以被转码/打包以便由该设备的运行时正确解释(无论是iOS还是Android或其他RIM所做的事情,我不认为他们在Windows Phone 7上有AIR,Win8的ARM也不支持浏览器插件)。部分混淆可能源于苹果拒绝分发“交叉编译”的应用程序,这使得AIR在iOS的选项列表中被排除了一年左右,就在Adobe开始宣布它可用于此目的之后(踢打Adobe时他们很难过)。另一个混淆的部分可能来自于真实视频,其中人们1黑客攻击了他们的设备或2能够在他们的iOS设备上让开源替代Flash播放器运行时工作(gnash是我从偶尔的Linux tinkering中知道的一个,也可能是FAKE vids)。