Corona、Phonegap和Titanium的比较

310

我是一名网页开发者,希望将我的网络产品移植到iPhone平台。其中一个产品类似于Google地图:在手机屏幕上显示地图,可以拖动或调整地图,并查看我们添加到地图上的一些信息。

我知道有一些技术可以使用HTML、CSS和Javascript来开发原生的iPhone应用程序。我已经找到了几个:

还有其他类似的产品吗?它们之间有什么区别?我应该选择哪一个?


1
还有Adobe FLEX,自2011年6月以来就可以生成iPhone应用程序。http://www.adobe.com/products/flex/ - neoneye
1
看一下。伙计,这里有一个简明比较。 http://savagelook.com/blog/portfolio/phonegap-is-web-based-appcelerator-is-pure-javascript - Hikmat Khan
14个回答

368

我注册了stackoverflow,只是为了在排名最高的答案上发表评论。不好的是,stackoverflow不允许新成员发表评论。所以我必须让这个评论看起来更像一个答案。

Rory Blyth的回答包含了一些关于两个javascript移动框架的有效观点。然而,他的关键观点是不正确的。事实上,Titanium和PhoneGap更相似而不是不同。它们都通过一组javascript API公开移动电话功能,并且应用程序逻辑(html、css、javascript)在本地WebView控件内运行。

  1. PhoneGap不仅仅是一个web应用程序的本地封装。通过PhoneGap的javascript API,"web应用程序"可以访问移动电话功能,例如地理位置、加速度计相机、联系人、数据库、文件系统等。基本上,移动电话SDK提供的任何功能都可以"桥接"到javascript世界中。另一方面,在移动Web浏览器上运行的普通Web应用程序无法访问大多数这些功能(安全性是主要原因)。因此,PhoneGap应用程序更像是移动应用程序而不是Web应用程序。当然,您确实可以使用PhoneGap来包装一个根本不使用任何PhoneGap API的Web应用程序,但这不是PhoneGap创建的目的。

  2. Titanium不会将您的html、css或javascript代码编译为"本机位"。它们被打包为可执行包的资源,就像嵌入式图像文件一样。当应用程序运行时,这些资源被加载到UIWebView控件中并在那里运行(当然是作为javascript,而不是本机位)。没有所谓的javascript-to-native-code(或to-objective-c)编译器。从架构角度来看,这两个框架非常相似。

现在,它们有什么不同吗?是的。首先,Titanium似乎比PhoneGap功能更丰富,通过将更多移动电话功能桥接到javascript来实现。最明显的是,PhoneGap没有向javascript公开许多(如果有)本机UI组件。另一方面,Titanium具有全面的UI API,可以在javascript中调用以创建和控制各种本机UI控件。利用这些UI API,Titanium应用程序可以看起来比PhoneGap应用程序更“本地化”。其次,PhoneGap支持比Titanium更多的移动电话平台。PhoneGap API更通用,可以在不同的平台上使用,例如iPhone,Android,Blackberry,Symbian等。目前,Titanium主要针对iPhone和Android。其中一些API是特定于平台的(如iPhone UI API)。使用这些API将减少应用程序的跨平台能力。

因此,如果您关注使应用程序看起来更“本地化”,则Titanium是更好的选择。如果您想更轻松地“移植”应用程序到另一个平台,则PhoneGap将更好。

更新8/13/2010: 链接到Titanium员工回答Mickey的问题。

更新12/04/2010: 我决定对这篇文章进行年度审查,以保持其信息的最新性。一年中发生了许多变化,使得初始文章中的某些信息已过时。

最大的变化来自Titanium。今年早些时候,Appcelerator发布了Titanium 1.0,从架构角度彻底改变了以前的版本。在1.0中,不再使用UIWebView控件。相反,您需要调用Titanium API来进行任何UI功能。这个变化意味着几件事情:
  1. 您的应用程序UI将变得完全本地化。您的应用程序中不再有Web UI,因为原生的Titanium API接管了所有UI需求。Titanium在“跨平台本地UI”领域开创了先河,值得赞扬。它为那些喜欢本地UI外观和感觉但不喜欢官方编程语言的程序员提供了另一种选择。
  2. 您将无法在应用程序中使用HTML或CSS,因为Web视图已经消失。(注意:您仍然可以在Titanium中创建Web视图。但是,在Web视图中,您可以利用的Titanium功能很少。)Titanium Q&A: What happened to HTML & CSS?
  3. 您将无法使用流行的JS库(如假定存在DOM对象的JQuery)。您仍然可以使用JavaScript作为编程语言。但是,如果您作为Web程序员转向Titanium 1.0,那么这几乎是您可以利用的唯一Web技术。

Titanium video: What is new in Titanium 1.0.

现在,Titanium 1.0是否将您的JavaScript编译为“本地位”?不是。 Appcelerator最终在开发者博客中澄清了这个问题:Titanium Guides Project: JS Environment.我们程序员比市场部门更真诚,不是吗? :-)

转到PhoneGap。关于PhoneGap没有什么新东西可说。我的感觉是,直到IBM在今年晚些时候加入之前,PhoneGap开发并不是很活跃。有些人甚至认为IBM为PhoneGap贡献的代码比Nitobi还多。无论是否属实,值得知道的是PhoneGap正在积极开发。

PhoneGap继续基于Web技术,即HTML,CSS和JavaScript。它似乎没有计划像Titanium一样将本机UI功能与JavaScript桥接。虽然Web UI在性能和本机外观方面仍落后于Native UI,但这种差距正在迅速缩小。在Web技术中有两种趋势可以确保移动Web UI在性能方面具有光明的未来:

  1. JavaScript引擎从解释器转向虚拟机。JavaScript被JIT编译成本地代码以加快执行速度。Safari JS引擎:SquirrelFish Extreme

  2. 网页渲染从依赖CPU转向使用GPU加速。图形密集型任务如页面过渡和3D动画在硬件加速的帮助下变得更加流畅。Chrome中的GPU加速合成

这些源自桌面浏览器的改进正在迅速传递到移动浏览器。事实上,自iOS 3.2和Android 2.0以来,移动Web视图控件变得更加高效和HTML5友好。移动Web的未来非常有前途,以至于它吸引了一个大牌子: JQuery最近宣布推出其移动Web框架。 JQuery Mobile提供UI小工具,而PhoneGap提供手机功能,两者结合起来在我看来创造了一个完美的移动Web平台。

我还应该提到Sencha Touch作为另一个移动Web UI小工具框架。Sencha Touch版本1.0最近采用双重许可模式发布,其中包括GPLv3。Sencha Touch与PhoneGap一样与JQuery Mobile很配合。

如果您是一名GWT程序员(就像我一样),那么您可能想要查看GWT Mobile,这是一个用于使用GWT创建移动Web应用的开源项目。它包括一个PhoneGap GWT封装器,可在GWT中使用PhoneGap。


10
你说“PhoneGap不仅是一个 Web 应用程序的本地封装”,然后讨论它提供给你的本机设备功能访问权限。当我写下 “除此之外,PhoneGap 还提供了 JavaScript 与本机设备 API 之间的桥梁。因此,您可以使用 PhoneGap API 编写 JavaScript,并使 PhoneGap 执行相应的本机调用。从这个角度来看,它与部署普通的 Web 应用程序有所不同。” 我认为已经涵盖了这一点。如果你注册只是为了反驳我的陈述,那么你应该完整阅读它。我知道我的帖子很长,但......还是要看完的。 - Rory Blyth
5
我可以更清晰地表达,但是提及使用哪些API的细节很复杂,因为这种情况因设备而异,你可以做什么也随时间而变化(虽然它已经显著改善,但不同平台的功能矩阵已经进行了相当多的修订)。我谈到了一个关键的差异,我的陈述是正确的-实际上,它与你所写的一致。你只是更详细地介绍了可以访问哪些API。 - Rory Blyth
9
关于钛和“本地位”,我想我的错误是在他们的网站上阅读了这个信息 - 就在 Appcelerator 的首页上:“它们运行良好,因为我们将钛编译成本地代码以达到最佳性能。”也许你应该写信给他们,让他们知道自己错了。请查看此链接:http://tinyurl.com/yzlzvk5 - Rory Blyth
6
请查看钛白铁 FAQs 获取更多信息 - 第一个主题,“这些是移动 Web 应用程序还是本机移动应用程序” 简明地概述了这个问题。我想在这里转载一段引语,但我认为您更愿意直接从公司那里获取,因为他们是产品的权威:http://tinyurl.com/ya9topg。 - Rory Blyth
4
Dennis,感谢您的精彩回答。您现在是否仍在使用 Titanium 进行开发?1.7 版本已经发布,您能否发表一下评论? - PaulM
显示剩余9条评论

193
  • PhoneGap生成本质上仍然是Web应用程序的原生包装器。它会生成一个适用于特定平台的项目,您构建并部署它。如果我们正在谈论iPhone(这是我花时间的地方),那么它与创建Web应用程序启动器没有太大区别(一种获得自己Springboard图标的快捷方式,因此您可以像本机应用程序一样启动它)。"应用程序"本身仍然是html / js等,并在托管的浏览器控件内运行。PhoneGap提供的不止这一点,还提供了JavaScript和本机设备API之间的桥梁。因此,您对PhoneGap API进行JavaScript编写,然后PhoneGap执行相应的本机调用。在这方面,它与部署普通的Web应用程序不同。

  • Titanium源代码被编译为本机二进制文件。也就是说,您的html / js等不仅仅附加到一个项目中,然后在Web浏览器控件内托管 - 它们被转换为本机应用程序。这意味着,例如,您的应用程序界面将由本机UI组件组成。有一些方法可以获得本地外观和感觉而无需使用本机应用程序,但是...嗯...这通常会变成一场噩梦。

  • 两者相似之处在于,您使用典型的Web技术(html / js / css / blah blah blah)编写所有内容,并且通过自定义JavaScript API访问本机功能。

    但是,再次强调,PhoneGap应用程序(PhonGapps?我不知道...那是一个愚蠢的名字吗?我知道那很容易说)从Web应用程序开始它们的生活,结束时仍是Web应用程序。在iPhone上,您的html / js等只是在UIWebView控件内执行,而您js调用的PhoneGap JavaScript API则被路由到本机API。

    Titanium应用程序成为本机应用程序 - 它们只是使用Web开发技术进行开发。

    这实际上意味着什么?

    1. Titanium应用程序看起来像“真正”的应用程序,因为它最终实际上就是一款“真正”的应用程序。

    2. PhoneGap应用程序看起来像在浏览器控件中托管的Web应用程序,因为最终它实际上就是在浏览器控件中托管的Web应用程序。

    哪个适合您?

    • 如果您想使用 Web 开发技能编写原生应用程序,则 Titanium 是您的最佳选择。

    • 如果您想使用 Web 开发技能编写可在多个平台(iPhone、Android、Blackberry 和其他任何可能包括的平台)上实际部署的应用程序,并且希望通过统一的 JavaScript API 访问本机平台特性(GPS,加速度计等),则 PhoneGap 可能是您想要的。

    您可能会问:为什么我要编写 PhoneGapp(我已决定使用该名称)而不是托管在 Web 上的 Web 应用程序?我不能以这种方式访问一些本机设备功能,但也可以方便地进行真正的 Web 部署,而不是强制用户下载我的“本机”应用程序并安装它吗?

    答案是:因为您可以将 PhoneGapp 提交到应用商店并收费。您还会得到启动器图标,这使用户更难忘记您的应用程序(我很可能会忘记书签而不是应用程序图标)。

    您当然可以收费访问您托管的 Web 应用程序,但有多少人真正愿意经历这个过程呢?通过 App Store,我选择一个应用程序,点击“购买”按钮,输入密码,然后就完成了。它安装了。几秒钟后,我正在使用它。如果我必须使用其他人的一次性移动 Web 交易界面,这可能意味着不得不敲出我的姓名、地址、电话号码、CC 号码和其他我不想敲出的东西,我几乎肯定不会继续下去。此外,我信任苹果 - 我相信 Steve Jobs 不会记录我的信息,然后以开玩笑的方式向我的 CC 收取一堆淫秽杂志订阅费用。

    无论如何,除了涉及Web开发技术之外,PhoneGap和Titanium非常不同,仅在表面上可以进行比较。

    顺便说一句,我讨厌Web应用程序,如果你阅读iTunes App Store的评论,用户很容易就能识别它们。我不会点名,但我的手机上有几个“应用程序”看起来像垃圾,并且运行得很差,因为它们是在UIWebView实例中托管的Web应用程序。如果我想使用Web应用程序,我会打开Safari并导航到一个应用。我买iPhone是因为我想要那些很有iPhone特色的东西。我没有问题使用时髦的Google Web应用程序,但如果Google将Web应用程序伪装成本地应用程序并以此在Springboard上出现书签,我会感到被欺骗了。

    现在必须走了,我的女朋友看着我,眼神带着“你能不能停止使用电脑三秒钟”的意思。


    22
    答案存在的问题是大多数是错误的。请参考DennisJZH在下面给出的答案。 - jbwiv
    9
    你的评论存在问题,因为它大部分基于DennisJZH的回答,而他的回答大部分是错误的。请看下面我的回复。为了避免进一步的混淆,我建议你们两个都查看产品的官方文档,并完整地阅读我的帖子。非常感谢。 - Rory Blyth
    15
    @Matthew - 噢,女友肯定更重要 :) 至于这些问题是否不相关,基本上因为变化是发生的(如果我误解了你的意思,我很抱歉),事实是人们确实想要现在存在的问题的答案。我们可以争论说这一切都没有意义,因为地球将来会被太阳加热并扩张,摧毁我们的星球,但是......这给了我们在等待时做些什么的机会。 - Rory Blyth
    2
    @Matthew - 此外,这个人确实愿意尝试新事物。也许不是你喜欢的方式,但它仍然是新的。你仍然需要学习iPhone开发(阅读UI指南等文档)。没有正当理由试图阻止别人尝试完成某些事情,只因为你认为它没有价值。例如,我讨厌蘑菇,但我不会试图阻止其他人吃蘑菇。我知道他们喜欢蘑菇的方式就像我喜欢藏红花一样,我也知道我不希望有人试图夺走我的藏红花,只因为他们不喜欢它。 - Rory Blyth
    1
    是的,但如果你是一位真正的网络技术大师,我相信没有人会意识到你的“Web应用程序”实际上并不是本地应用程序。在那些明显的情况下,一个应用程序是用UIWebView包装的“Web应用程序”,这意味着创建者没有花足够的时间或关心去制作高质量的应用程序。 - trusktr
    显示剩余3条评论

    62

    我正在学习 Android/iPhone 开发课程,我们花了 8 周的时间用 Titanium 进行开发(非全职),版本为 Titanium 1.4.2,时间大约是在2010年11月左右。以下是我的经验。

    iPhone 和 Android 的双重定位

    尽管 API 指南声称这些功能都可用于 Android 和 iPhone,但事实并非如此。许多东西在其中一个平台上根本不起作用,有些功能在不同平台上的工作方式也不同。

    班上很多人都做过 iPhone 应用程序,但他们无法将其在 Android 上运行而不进行重大修改。我开发了一个名为 Animap 的简单儿童应用程序(在瑞典的 Android 市场/应用商店中可见),并在 Windows 下开始开发。一旦 Android 目标成功运行,我就在 OS X 上打开了该项目。它没有显示任何 iPhone 的构建内容,只有 Android 的。您需要在 OS X 下启动双重目标项目。 (好吧,我把相关文件复制到了一个新项目中)。下一个问题是:iPhone 上的动画效果不起作用(它们在 Android 上起作用)。滚动事件在 iPhone 上不起作用。 (例如,在 Android 上,当用户停止滚动并释放手指时,您会收到未触摸事件,而在 iPhone 上不会发生这种情况)。

    由于这些问题未在任何地方提到,因此您基本上需要在一个平台上进行尝试和错误编程,然后在另一个平台上进行。通过“尝试和错误”,我意味着要将一个简单的应用程序(如 Animap)在另一个平台上运行,需要大约两天时间。您还需要在代码中随处添加 if (android) then... 或 if(iphone)...才能使其正常工作。

    下载和设置

    您必须严格按照说明进行操作。不要尝试使用64位Java。它无法编译 KitchenSink 1.4.0 示例应用程序。(1.3 可以正常工作!) 您必须直接将文件放在 C 盘上,因为路径过长会使外部程序无法接收所有命令行参数。(对于小型程序来说很好用) 有1/3的可能性,工具链会突然停止工作,您必须再次按“启动”按钮。然后它可能会工作……非常不可靠。 模拟器将在启动时找不到,然后您只需使用 Ctrl+Alt+Delete 杀死 adb.exe,并重试。

    网络连接

    在wifi网络上,有时会失去连接,Titanium 将崩溃(编译/部署接口) 如果您没有工作的互联网连接,它将无法启动,因为它无法登录到他们的服务器。

    API

    CSS、HTML 和 jQuery 相比之下就像小菜一碟。Titanium 像任何其他旧的 GUI API 一样,您需要为每个单独的按钮/字段等设置一些属性。出错很容易,记得设置所有需要设置的属性吗?您是否在正确的位置使用了大写字母?(因为这不会被编译器捕获,但如果您有幸测试了该部分,则会看到运行时错误)

    在Titanium中,如果在控件上添加另一个视图或单击GUI中的其他位置,事情会变得混乱不堪。
    文档
    有几个API页面带有Android符号,但当您尝试创建控件时,它们只会返回null。尽管有这些符号,它们在Android平台上并不直接可用。有时会提到Android不支持特定方法,但整个API都是缺失的。
    KitchenSink
    演示应用程序。必须放在根文件夹下的C驱动器中,否则如果将其放在Eclipse项目文件夹中,路径会变得太长,就无法编译。我目前使用符号链接(mklink /J ...)。
    未记录的方法
    您可能需要使用label.setText('Hello World')之类的内容来可靠地更改标签,但完全没有记录。
    调试
    Titanium.API.info('Printouts are the only way to debug');
    编辑
    API在任何良好格式中均不可用,因此您无法在Eclipse中获得普通的代码补全、帮助等。请求Aptana的帮助!
    硬件
    编译器/工具似乎不支持多线程处理,因此必须拥有一台快速计算机和快速硬盘,因为您必须进行大量的试错。我是否提到过糟糕的文档?你必须尝试所有这些,因为你无法信任它!
    一些积极的事情
    开源。从以前的项目中,我已经向自己承诺再也不使用闭源软件,因为您不能仅通过投入时间和人力来修复问题。当您在项目中晚到并且需要在紧急截止日期之前交付时,这一点非常重要。这是开源的,我能够看到为什么工具链中断,并实际解决它。
    错误数据库
    它也是开放的。您可以简单地看到您不是一个人,并进行解决方法而不是再花费4个小时进行试错。
    社区
    似乎在他们的论坛上活跃。
    Bugs
    Titanium 1.4不支持多线程。这意味着如果您使用线程(在createWindow调用中使用url:属性)并像线程正在工作一样编程,并将事件与数据来回发送,则会遇到许多非常奇怪的问题——丢失处理程序、丢失窗口、过多或过少的事件等。这完全取决于时间安排,将代码行放置在不同的顺序可能会崩溃或修复应用程序。在另一个file.js文件中添加窗口会破坏您的app.js执行...这也会破坏Titanium中的内部数据结构,因为有时候它们可以并行更新内部数据结构,用其他东西覆盖刚才更改的值。很多我在Titanium上遇到的问题都源自于我在实时系统(例如支持数百个线程、事件和消息传递的OSE)方面的背景。虽然这应该在Titanium 1.4中可以工作,但它并不可靠。
    JavaScript(对我来说是新东西)会在运行时错误时默默地死掉。这也意味着像变量名拼写错误或读取空指针这样的小而常见的错误不会在应该崩溃时崩溃,因此您无法调试它。相反,程序的某些部分只是停止工作,例如事件处理程序,因为您错放/打错了一个字符。
    然后我们在Titanium中有更简单的错误,比如一些参数不起作用的函数(至少在Android平台上很常见)。
    试验和错误调试周期速度 在多台计算机上运行Titanium Developer后,我注意到瓶颈是硬盘驱动器。笔记本电脑上的SSD驱动器使构建周期比4200 rpm的驱动器快3-5倍。在桌面上,使用RAID 1(条带模式)的双驱动器使构建速度比某些更快的CPU的单驱动器快约25%,并且也击败了SSD驱动器的笔记本电脑。
    总结 从本帖子的评论中可以看出,似乎有一场争夺工具类应用程序可以为多少平台提供服务的战斗。 API数量似乎是关键卖点。
    当您开始使用它时,这非常明显。如果您查看开放的bug追踪器,则会发现错误数量增加的速度比修复错误的数量快得多。通常,这表明开发人员继续添加更多功能,而不是集中精力减少错误数量。
    作为一名顾问,我试图为客户在多个平台上交付相当简单的应用程序-我不确定这是否比在两个平台上进行本地应用程序开发实际上更快。这是由于当你熟练掌握Titanium时,你很快,但突然间你会发现自己掉进了一个深不见底的坑,不知道必须花费多少时间来解决问题。您根本不能保证某个期限/时间/成本的某些特定功能。
    关于我自己:使用Python和wxPython已有两年(该GUI不一致,但从未像这样崩溃过)。在此之前,我有在移动设备上使用C和ASM编程的背景。

    1
    随着Titanium 1.4的发布,我现在已经查看了从Titanium交付的.apk文件,但它们并不是很好。它们可以工作,但完整的构建目录有点像压缩在一起。这意味着像将启动画面在构建过程中复制到三个不同位置这样的小型构建缺陷突然会在手机上消耗大约1兆字节(因为我有一个很大的启动画面图像)。这仅适用于一个非常简单的hello-world变体。 Javascript源代码也会复制到构建和.apk文件中,因此交付给所有客户。 - user288299
    版本1.5现已发布,据说是Android平台的重大改写。我不会测试它,因为我现在需要学习本地Android开发。 - user288299
    发布版本1.5现已推出,据说是Android平台的重大改写。 我不会测试这个版本,因为我们现在已经开始学习本地Android开发了。 今天,我们学习了本地Android的生命周期,我相信我遇到的某些窗口第二次显示时丢失变量内容的问题是由于Titanium未在生命周期的onPause()状态之前保存状态所导致的。http://developer.android.com/guide/topics/fundamentals.html#lcycles。调用Titanium.Map.MapView.hide(),稍后再调用show()可能会简单地杀死地图的局部变量。 - user288299
    1
    刚刚试用了1.7版本,你的描述非常准确。这个平台非常不稳定,性能很差,需要花费大量时间来解决问题。如果在项目开始时有足够的资源,最好为每个平台构建本地应用程序。 - Jonathon Kresner

    25

    Corona SDK (Ansca Mobile)使用Lua作为其编码语言。请访问lua.org了解更多关于Lua的信息。

    虽然我们计划添加进一步的Web集成和原生UI元素,但我们的重点将倾向于图形密集型应用程序,如游戏开发,而不是基于Web的技术。换句话说,我们并不希望人们完全使用Javascript / HTML / CSS编写Corona应用程式。


    你们有关于原生UI脚本的计划或时间表吗?我已经用Lua做了很多工作,而且我真的很想喜欢Corona。对于非游戏开发,Titanium似乎领先一些。 - uroc
    4
    你好,uroc。我们即将在本周发布的1.1版本中加入本地化的用户界面特性,并计划在不久的将来推出更多功能。然而,我的理解是Titanium已经很好地暴露了大量本地化的用户界面元素,而我们将专注于最关键的用户界面元素,同时将更多的工程力量投入到动画和渲染特性中。这样做的原因是:(i)已经有针对仅使用用户界面的应用的好产品了,(ii)相对而言,用户界面是Cocoa中最友好的部分,但(iii)任何涉及OpenGL动画都是iPhone目前的痛点。 - Evan Kirchhoff
    似乎 Corona 更适合开发游戏而不是应用程序,这是正确的吗? - anticafe

    18

    我已经使用Titanium工作了一个多星期,对其弱点有了很好的了解。

    1) 如果你希望在多个平台上使用相同的代码,那么祝你好运!你可能会看到像backgroundGradient这样的东西,并感到惊讶,但是当你发现安卓版本不支持它时,你就必须退回到使用渐变图像,最好同时适用于两个版本,以使代码更容易处理,对吧?

    2) 很多奇怪的行为,在Titanium的Android SDK中,你需要理解什么是“重量级”窗口才能使返回按钮起作用,或者更好的方向事件跟踪。这并不是Android平台的真实情况,这只是Titanium试图让他们的API工作的方式。

    3) 你会被扔进黑暗中,事情会崩溃,你必须开始注释代码,然后当你找到问题的根源时,就永远不要再使用它了。有一些明显的bug,比如安卓上的方向和百分比,已经存在了六个月以上的问题。

    4) Bug...有很多bug,它们会被报告,坐在那里几个月,然后在几天内修复。我很惊讶他们甚至在有这么多安卓问题的情况下,还计划发布黑莓手机SDK。

    5) Titanium iPhone与Titanium Android JavaScript引擎完全不同。在Android版本中,您可以下载远程JavaScript文件,包括并使用库,如mootools、jQuery等。当我发现这一点时,我感到非常高兴,因为我不必不停地编译我的Android应用程序。安卓apk安装过程太长了!在iPhone上,这些都不可能实现,而且iPhone版本具有更快的JavaScript引擎。

    如果你避开很多本机UI部件,比如改用setInterval来检测方向变化,使用渐变图像,忘记返回按钮,构建自己的动画,忘记窗口标题、工具栏和仪表板,那么你真的可以构建一个适用于两个平台的API,而不需要进行大量的重写。但是此时它就像一个网页应用程序一样缓慢。

    这样做是否值得呢?经历了所有的痛苦,每一分钟都是值得的。你可以抽象出逻辑,只需为每个应用构建不同的用户界面,而无需在此处使用if else语句。Titanium使您能够创建流畅的应用程序,感觉非常快速。您会失去每个平台强大的布局功能,但如果您考虑简单,事情可以在单一语言下完成。

    为什么不选择Web应用程序?在入门级市场的Android手机上,生成Webview非常缓慢,并且消耗了大量内存,您可以利用这些内存来执行更复杂的逻辑。


    10

    9

    在Titanium中支持原生的MapKit。


    8
    制作看起来像 iPhone 小部件的 HTML5 小部件是一回事,但使它们同样表现良好则完全是另一回事。HTML5 动画(即使是简单的视图转换)、滚动长列表、对手势的响应能力感觉卡顿和不流畅。iPhone 用户会注意到这种差异。
    此外,不同设备支持的手势类型也存在差异,这导致了平台特定的代码和可用性问题。
    我想我现在还是会使用原生应用程序。

    7

    Rhomobile Rhodes(http://rhomobile.com/products/rhodes)与PhoneGap在方法上非常相似,但它是唯一具有以下特点的框架:

    1. 模型视图控制器模式(大多数web框架都提供)
    2. 对象关系管理器
    3. 支持所有流行的智能手机(包括Windows Phone 7)
    4. 托管开发服务(不仅是托管构建):http://rhohub.com
    5. RhoStudio IDE中具有完整调试器和无需SDK的模拟器
    6. 支持同步离线数据

    6

    对于对Titanium感兴趣的任何人,我必须说他们没有很好的文档记录有些类、属性和方法是缺失的。但是在他们的示例应用程序KitchenSink中有很多“文档”,因此情况并不是那么糟糕。


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