电晕,Phonegap,钛之间的比较
我是一名Web开发人员,我想将我的Web产品移至iPhone。 其中一种产品就像Google地图:在电话屏幕上显示地图,您可以拖动或调整地图大小,并查看我们添加到地图的一些信息。
我知道有一些技术可以让你使用HTML,CSS和Javascript开发原生iPhone应用程序。 我已经确定了几个:
还有其他类似的产品吗? 他们之间有什么不同? 我应该选择哪一个?
我注册了stackoverflow仅仅是为了评论大多数投票答案。 不好的一点是,stackoverflow不允许新成员发表评论。 所以我必须让这个评论看起来更像一个答案。
Rory Blyth的回答包含了关于这两个javascript移动框架的一些有效观点。 但是,他的关键点不正确。 事实是Titanium和PhoneGap比不同。 他们都通过一组JavaScript API公开手机功能,并且应用程序的逻辑(html,css,javascript)在本机WebView控件中运行。
PhoneGap不只是一个Web应用程序的本地包装。 通过PhoneGap JavaScript API,“网络应用程序”可以访问手机功能,例如地理位置,加速计摄像头,联系人,数据库,文件系统等。基本上,手机SDK提供的任何功能都可以“桥接”到javascript世界。 另一方面,在移动Web浏览器上运行的普通Web应用程序无法访问大多数这些功能(安全性是主要原因)。 因此,PhoneGap应用程序比Web应用程序更适合移动应用程序。 您当然可以使用PhoneGap来封装一个根本不使用任何PhoneGap API的Web应用程序,但这不是PhoneGap的创建目的。
Titanium不会将您的html,css或javascript代码编译为“本地位”。 它们被打包为可执行文件包的资源,非常类似于嵌入式图像文件。 当应用程序运行时,这些资源被加载到一个UIWebView控件中并在那里运行(当然,就是javascript,而不是本地位)。 JavaScript-to-native-code(或to-objective-c)编译器没有这样的东西。 这在PhoneGap中也是这样做的。 从架构角度来看,这两个框架非常相似。
现在,他们有什么不同? 是。 首先,Titanium似乎比PhoneGap功能更丰富,它将更多手机功能与JavaScript结合起来。 最明显的是,PhoneGap不会将很多(如果有的话)本机UI组件暴露给javascript。 另一方面,Titanium具有全面的UI API,可以在JavaScript中调用它来创建和控制各种本机UI控件。 利用这些UI API,Titanium应用程序看起来比PhoneGap应用程序更“原生”。 其次,PhoneGap支持比Titanium更多的手机平台。 PhoneGap API更通用,可用于iPhone,Android,Blackberry,Symbian等不同平台。钛至少主要针对iPhone和Android。 它的一些API是平台特定的(如iPhone UI API)。 使用这些API会降低应用程序的跨平台功能。
因此,如果您对您的应用程序的关注是为了让它看起来更“天生”,Titanium是更好的选择。 如果您希望能够更轻松地将您的应用“移植”到另一个平台,PhoneGap会更好。
Updated 8/13/2010:链接到Titanium员工对Mickey问题的回答。
更新12/04/2010:我决定给这个职位每年审查,以保持其当前信息。 许多事情在一年中发生了变化,使得最初的帖子中的一些信息过时了。
最大的变化来自Titanium。 今年早些时候,Appcelerator发布了Titanium 1.0,从架构角度来看,它离开了之前的版本。 在1.0中,UIWebView控件不再被使用。 相反,您可以为任何UI功能调用Titanium API。 这种变化意味着一些事情:
您的应用用户界面变得完全原生 由于本机Titanium API接管了所有UI需求,因此您的应用中不再需要Web UI。 钛在“跨平台本地用户界面”领域开创先河,值得信赖。 它给程序员更喜欢本地UI的外观和感觉,但不喜欢官方编程语言。
由于网页视图不见了,您将无法在应用中使用HTML或CSS。 (注意:您仍然可以在Titanium中创建Web视图,但是您可以在Web视图中利用很少的Titanium功能。)钛问答:HTML和CSS发生了什么变化?
您将无法使用流行的JS库,如假设存在DOM对象的JQuery。 您继续使用JavaScript作为您的编码语言。 但是,如果您作为网络程序员来到Titanium 1.0,那么这就是您可以利用的唯一网络技术。
Titanium视频:Titanium 1.0中的新功能。
现在,Titanium 1.0是否将JavaScript编译为“本地位”? 没有。Appcelerator终于在这个开发者博客中清楚了这个问题:Titanium Guides Project:JS Environment。 我们的程序员比市场部门的人更真实,不是吗? :-)
转到PhoneGap。 关于PhoneGap没有太多新东西要说。 我的理解是PhoneGap的发展在今年晚些时候IBM跳槽之前并不是非常活跃。 有些人甚至认为IBM为PhoneGap贡献了比Nitobi更多的代码。 这是真的,不是真的,知道PhoneGap正在积极开发。
PhoneGap继续以Web技术为基础,即HTML,CSS和JavaScript。 看起来PhoneGap并没有计划将原生UI功能与JavaScript结合起来,正如Titanium所做的那样。 尽管Web UI在性能和原生外观方面仍落后于原生UI,但这种差距正在迅速关闭。 Web技术有两种趋势确保移动Web UI在性能方面具有明显的特点:
JavaScript引擎从解释器移动到虚拟机。 JavaScript是JIT编译成本机代码以加快执行速度。 Safari JS引擎:SquirrelFish Extreme
网页渲染从依靠CPU转向使用GPU加速。 借助硬件加速,图形密集型任务(如页面转换和3D动画)变得更加平滑。 Chrome中的GPU加速合成
这些源于桌面浏览器的改进功能正在迅速提供给移动浏览器。 事实上,自从iOS 3.2和Android 2.0以来,移动网页视图控件已经变得更加完善并且对HTML5友好。 移动网络的未来非常有希望,它已经吸引了一个大城市的孩子:JQuery最近宣布了其移动Web框架。 随着JQuery Mobile提供UI小工具和PhoneGap提供的电话功能,我认为它们两者的结合创造了一个完美的移动网络平台。
我还应该提到Sencha Touch作为另一个移动Web UI小工具框架。 Sencha Touch版本1.0最近在包含GPLv3的双重许可模式下发布。 Sencha Touch就像JQuery Mobile一样可以很好地与PhoneGap配合使用。
如果你是GWT程序员(像我一样),你可能想看看GWT Mobile,一个用GWT创建移动网络应用程序的开源项目。 它包含一个PhoneGap GWT包装器,可以在GWT中使用PhoneGap。
从我所搜集的内容来看,这两者之间有一些区别:
PhoneGap基本上为仍然是web应用的东西生成本地包装。 它吐出一个WhateverYourPlatformIs项目,你创建它并部署。 如果我们谈论的是iPhone(这是我花费我的时间),它似乎与创建一个Web应用程序启动器(一个获取自己的Springboard图标的快捷方式,因此您可以像启动它(像)一样)一个本地应用程序)。 “app”本身仍然是html / js /等,并在托管浏览器控件中运行。 除此之外,PhoneGap提供的是JavaScript和本机设备API之间的桥梁。 因此,您可以针对PhoneGap API编写JavaScript,然后PhoneGap会进行相应的本地调用。 在这方面,它不同于部署一个普通的旧Web应用程序。
钛源被编译成本地位。 也就是说,你的html / js /等。 不是简单地附加到项目中,然后托管在Web浏览器控件中 - 它们变成了本地应用程序。 这意味着,例如,您的应用的界面将由本地UI组件组成。 有许多方法可以在没有原生应用程序的情况下获得本地外观,但是......嗯......通常会发生什么样的噩梦。
这两者的相似之处在于,您可以使用典型的Web技术(html / js / css / blah等等)编写所有内容,并且可以通过自定义JavaScript API访问本机功能。
但是,再次,PhoneGap应用程序(PhonGapps?我不知道......是一个愚蠢的名字吗?这很容易说 - 我知道这么多)作为网络应用程序开始他们的生活,并以网络应用程序结束他们的生活。 在iPhone上,你的html / js /等。 只是在UIWebView控件内部执行,并且您的js调用的PhoneGap JavaScript API会路由到本机API。
Titanium应用程序成为本地应用程序 - 它们只是使用Web开发技术开发的。
这实际上意味着什么?
Titanium应用程序将看起来像一个“真实”的应用程序,因为它最终是一个“真实”的应用程序。
PhoneGap应用程序看起来像一个托管在浏览器控件中的Web应用程序,因为它最终是一个托管在浏览器控件中的Web应用程序。
哪个适合你?
如果你想用web开发技巧编写本地应用程序,Titanium是你最好的选择。
如果您想使用web dev技能编写应用程序,并且您可以将这些应用程序真实地部署到多个平台(iPhone,Android,Blackberry以及他们决定包含的任何其他平台),并且如果您想要访问一部分本机平台功能(GPS,加速度计等)通过一个统一的JavaScript API,PhoneGap可能是你想要的。
您可能会问:为什么我要编写一个PhoneGapp(我决定使用该名称)而不是Web上托管的Web应用程序? 我仍然无法通过这种方式访问某些本地设备功能,但是也可以方便地进行真正的Web部署,而不是强迫用户下载我的“本地”应用并安装它?
答案是:因为您可以将PhoneGapp提交给App Store并对其进行收费。 你还会得到这个启动器图标,这使得用户忘记你的应用程序变得更加困难(我更可能忘记书签而不是应用程序图标)。
您当然可以为访问您的网站托管的网络应用程序收费,但有多少人真的要通过该过程来做到这一点? 在App Store中,我选择一个应用程序,点击“购买”按钮,输入密码,然后完成。 它会安装。 几秒钟后,我正在使用它。 如果我不得不使用别人的一次性移动网络交易界面,这可能意味着不得不点击我的姓名,地址,电话号码,CC号码以及其他我不想出来的东西,我几乎可以肯定,没有经过它。 另外,我相信苹果 - 我相信史蒂夫乔布斯不会记录我的信息,然后向我的CC收取一堆淘气杂志订阅费用。
无论如何,除了涉及网页开发技术的事实之外,PhoneGap和Titanium都非常不同 - 只是表面上具有可比性。
我讨厌网络应用程序,如果你阅读iTunes App Store的评论,用户很擅长发现它们。 我不会列出任何名称,但我的手机上有几个“应用程序”,它们看起来像垃圾一样运行,这是因为它们是托管在UIWebView实例内的Web应用程序。 如果我想使用Web应用程序,我会打开Safari,并且,导航到一个。 我买了iPhone,因为我想要的是iPhone-y的东西。 我在Safari中使用时髦的Google网络应用程序没有问题,但如果Google只是通过将Web应用程序呈现为本地应用程序来将书签粘贴到Springboard上,我会觉得受到欺骗。
要离开了。 我的女朋友在她的脸上可以停下来用那三秒钟的电脑。
我参加了Android / iPhone开发课程,我们花了8周的时间与Titanium(非全职)(版本为Titanium 1.4.2,时间在2010年11月左右)。 这是我的经验。
iPhone Android双目标
尽管API指南声称Android和iPhone都具有该功能,但事实并非如此。 很多东西根本不适用于其中一个平台。 有些事情工作不同。
许多班上的人都做过iPhone应用程序,并且他们无法在没有重大改写的情况下在Android上工作。 我开发了一款名为Animap的简单儿童应用程序(参见瑞典的android market / Appstore),并开始在Windows下开发。 一旦Android目标正在工作,我就在OS X上打开了该项目。它不会为iPhone显示任何构建内容,仅适用于Android。 您需要在OS X下启动一个双目标项目(好吧,我将相关文件复制到一个新项目中)。 下一个问题 - 动画在iPhone上无法使用(它们在Android上工作)。 iPhone上的滚动事件不起作用。 (即在Android上,当用户停止滚动并从屏幕释放手指时,您会收到未触摸事件,但这不会发生在iPhone上)。
由于这个地方没有提到,所以基本上需要在第一个平台上进行试错法编程,然后在另一个平台上进行试错法编程。 通过试验和错误我的意思是大约需要两天时间才能获得像Animap这样的简单应用程序在其他平台上工作。 你还需要if(android)然后...或者如果(iphone)...遍布你的代码...
下载并安装
你必须按照这封信的指示。 不要尝试使用Java 64位。 它不会编译KitchenSink 1.4.0演示应用程序。 (1.3工作正常!)您必须将文件直接放在C驱动器上,因为如果路径名变长,外部程序将无法接收所有命令行参数。 (虽然对于小程序来说很好)但是1/3的时间,工具链只是简单的停下来,你必须再次按'发射'。 那么它可能会工作......非常不可靠。 在启动时不会找到模拟器,然后您必须使用Ctrl + Alt + Delete简单地杀死adb.exe并重试。
网络连接
在无线网络中,有时会丢失实时连接,并且Titanium会崩溃(编译/部署界面)如果您没有可用的Internet连接,它将无法启动,因为它无法将您登录到其服务器。
API
与此相比,CSS,HTML和jQuery是一件轻而易举的事情。 Titanium与其他任何旧的GUI API类似,您需要为每个按钮/字段/等设置一些属性。 记住一个字段是错的,记住所有需要设置的属性? 你是否在正确的地方拼写大写字母? (因为这不是被编译器捕获的,但是如果你很幸运地测试那个部分将会被看作是运行时错误)
在Titanium中,当您在控件的顶部添加另一个视图或在GUI中的其他位置单击时,事物就会中断。
文档
几个API页面带有Android符号,但只有在尝试创建控件时才会返回null。 尽管有这些符号,但它们并非简单地在Android平台上提供。 有时候Android会提到不支持特定的方法,但是整个API都会丢失。
厨房水槽
演示应用程序。 我提到它不会编译,如果你把它放在你的Eclipse项目文件夹中,因为路径太长了? 必须放在您的C盘上的根文件夹。 我目前使用symbolik链接(mklink / J ...)
未记录的方法
你必须使用label.setText('Hello World')来改变标签的可靠性,但这一点都没有记录。
调试
Titanium.API.info('打印输出是唯一的调试方式');
编辑
这些API不具 链接地址: http://www.djcxy.com/p/15361.html