Flex应用程序能在移动设备上运行吗?

3
一个设计用于PC的Flex应用程序能在iPad、iPhone或基于Android的移动设备上运行吗?访问http://www.adobe.com/products/flex.html网站,可以看到一张图片,展示了一个人在Android上运行(可能是)Flex应用程序。因此乍一看,答案似乎是“是”。故事结束。
但是...
各种技术网站上有很多(误)信息表明基于Flash的技术根本无法在iOS或其他移动平台上运行。为什么会这样呢?也许他们的意思是说Flex不能“开箱即用”,需要插件?还是说它根本无法运行?
每当我认为我已经得出了一个明确的结论时,SlashDot或CNET上的某篇文章就会直接反驳它。那么情况怎么样?我们能否将现有的Flex应用程序运行在iOS/Android上?(我知道要考虑屏幕尺寸问题,因此应用程序可能无法有效地运行。我只想知道是否在移动设备上可用运行Flex应用程序所需的运行时环境。)
抱歉问一个初学者的问题。我的背景是WPF/HTML5。Adobe技术对我来说完全陌生。
5个回答

4

如果您想阅读下面的内容,我写了很多,但如果不想看,对不起浪费您宝贵的字节 :) 我先直接回答上面的问题:

为什么会这样? 这是一个令人困惑的问题,请继续阅读下面的详细信息。

也许他们的意思是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)。

谢谢,这很有用!你太棒了。让我失望的是,如果我想将Flex编译为本机iOS应用程序,它必须通过应用商店部署[除非,正如David指出的那样,您知道目标设备的ID并将部署限制在99人以下]。Flex和HTML5都有其优缺点,但我得到的印象是,对于新项目来说,HTML5是最容易的选择。对于现有的Flex项目,很高兴知道有一条迁移路径到移动设备。再次感谢! - Chad Decker
@ChadDecker 首先感谢你,非常友好。我同意特别是在Web应用程序方面,HTML5/CSS3/JS目前似乎是正确的选择。但目前有一部分人使用本地应用程序从网络上获取信息,而不是浏览网页,因此AS3在这方面仍然是可行的(在这种情况下仍然是跨平台的)。在浏览器中,特别是关于CSS3,仍然存在碎片化的解释,但在这种情况下,我们似乎必须接受多样化的解释。 - shaunhusain

3
您可以在移动设备上运行Flex应用程序,但不能简单地运行任何Flex项目。
在Flash Builder(Flex Ide)或Flash Professional中,您可以创建移动项目。这些项目会为iOS和Android生成本机应用程序。
上次我尝试的结果和可用组件比我预期的要少。因此,如果可能的话,我强烈建议您选择像Appcelerator.com或类似的东西,将HTML5 / Js代码转换为本机应用程序。我尝试了它们,比Flex效果好得多。

+1。完全同意。当考虑移动设备时,我会放弃Flash/Flex并转向HTML5。 - davidethell
1
@ChadDecker,并不完全正确。并非所有的控件都可以在移动项目中使用,如果我没记错的话。你必须使用正确的控件子集。试一试就知道了。 - davidethell
@ChadDecker,不可以。你可以使用你的应用程序逻辑代码库,但组件不同。换句话说:你可以使用Actionscript来开发和所有Flex核心和图形库,但是UI你必须使用非常有限的集合。至少在我上次检查时是这样。 - Johnny Everson
@ChadDecker,您可以对用户进行即席安装。但是您必须事先知道他们的设备ID,并且最多只能有99个用户。Ad Hoc主要用于测试。因此,如果您只想在小公司内部使用它,那可能会起作用。 - davidethell
3
这个答案并不完全准确。任何SWF文件都可以使用命令行工具转换成iOS原生应用程序,因此任何项目都可以在iOS上运行作为本地应用程序。但是出于原问题中所述的原因(屏幕尺寸、触摸输入、性能),您很可能不希望这样做。任何Flex组件都可以用于移动应用程序;然而,在Flash Builder中创建移动项目时,它会将组件集限制为具有移动优化皮肤的组件。这并不意味着您不能使用其他组件,只需自己向项目添加库即可。 - JeffryHouser
显示剩余3条评论

1

简短回答:不行

详细回答:您可以使用Adobe的工具将Flash/Flex应用程序编译为本机iOS应用程序。因此,您将无法像通常使用Flex一样将应用程序嵌入网页中,但是您可以构建它作为本机应用程序。请注意,您必须拥有Flash Builder 4.5才能执行此操作。


原帖作者没有明确说明他是在创建一个基于浏览器的应用程序(针对Flash Player)还是一个基于桌面的应用程序(针对Adobe AIR)。你的简短回答“不”只适用于基于浏览器的应用程序。我认为说所有Flex应用程序都嵌入在网页中是不完整的。 - JeffryHouser
好的,我在短回答中假设是基于浏览器的,因此才有了长回答。 - davidethell

1

它不能作为.swf文件在iPhone上运行,但是在安装了Adobe Flash的基于Android的设备上可以运行。它也可以在BB playbook上运行,该设备也支持Flash。


你说得没错,但这个答案并不完整。虽然Flash SWF无法在iOS移动浏览器中运行,但是你可以使用AIR SDK提供的免费命令行工具将任何SWF转换为本机iOS应用程序。这包括Flex应用程序。在大多数情况下,由于触摸输入和屏幕尺寸等问题,您不会想将任何SWF“原样”转换为移动应用程序,但它确实是可以做到的。 - JeffryHouser

0

Flex是一个框架。(无论如何,它非常漂亮,有时甚至看起来像完全不同的语言)。

一旦您构建了AIR应用程序,它可以在各种平台上运行,例如:Windows、iOS、Android、即将推出的电视、PlayBook,甚至未来(也许/希望)在Windows Phone上,以及Linux(AIR的未来并不是很明确,但希望Adobe会重新考虑)。

因此,使用Flash Builder 4.5+创建的应用程序可能会在任何地方运行,只要它是AIR应用程序。 编译方法非常简单,您几乎可以同时为想要的所有内容进行编译。

这里最重要的事情之一是 - 您的应用程序将在一个设备上以相同的方式运行、工作、外观和感觉。Flex负责使每个平台上的所有内容看起来都很漂亮。 例如,我目前正在为Android编译,甚至没有测试,我就可以清楚地说它在iOS和Windows下看起来和感觉都是一样的,而且它确实是这样的。


更进一步。随着即将发布的Flash 11.2+版本,将会有显著的性能变化,并且将会有纯OpenGL曝光和ActionScript的变化,以及真正的多线程将会实现每个数字多平台梦想成真:)。 - Yordan Yanakiev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接