所以我一直在研究iPhone的中型企业应用程序,我可能需要移植到Android。我使用原生iOS SDK编写了应用程序,而不用担心可移植性。我最初不得不用Java重新编写整个应用程序并维护两个代码库,因此我研究了一些跨平台选项。
我在两个跨平台应用程序中编写了一个简单的“hello world”,另一个使用本机SDK只是为了感受每个平台的性能和稳定性。这绝不是一个完全详尽的实验,只是快速而肮脏的测试。我惊讶地发现PhoneGap和Appcelerator的Titanium只有显示“hello world”才有非常明显的启动时间。此外,如果我关闭应用程序然后快速连续重新打开它(30-40次快速迭代),PhoneGap和Titanium都会崩溃。另一方的Native应用程序从未遇到任何问题。
最初我认为我可以忍受较慢的启动时间,因为有一个代码库可以统治它们。然后我遇到了以下潜在的障碍:
调试支持似乎有限。
根据电话间隔wiki,建议您使用远程Web检查器调试(1)桌面(2)(3)printf调试[你在开玩笑吗?]或(4)使用{ {3}}
Titanium的调试稍好一些,但仍然缺乏设备调试支持。设备调试有一个开放的weinre,一年前就可以修复了。
对于有少数开发人员的小型项目,调试可能不是问题,但是随着越来越多的开发人员使用相同的代码库,项目变得越来越快就变得非常重要。
您仍需要调整每个设备的用户界面。
对于某些人来说,这可能是也可能不是问题,但我希望我们的应用看起来像本机应用,并遵循每个平台的人机界面指南。所以我仍然会在UI层重复代码。
此时我必须为每个设备提供单独的UI代码,并且设备上的调试选项没有本机应用程序那么丰富,我没有看到跨平台开发框架会带来的节省。我认为最好的路线是在C中重新编写我的模型,然后我可以在Android(使用NDK)和iOS之间共享该代码,每个设备都有自己的原生UI。
所以我的问题是,任何人都有跨平台移动框架的经验吗?我对有限调试和重复UI代码的担心是否毫无根据?请记住,我希望每个平台都有一个看起来像本机应用程序的应用程序。
对于那些使用跨平台框架的人来说,项目有多大?你遇到了什么问题?你会再次使用这个框架吗?
-Shane
答案 0 :(得分:1)
我使用过appcelerators钛很多。我的一般感觉是IOS部分非常好但是android仍然缺乏,特别是在错误消息中,调试并不是那么糟糕,因为所有你需要做的是添加一些打印输出,但问题是99%的android上的错误会像应用程序崩溃与nullPointerException没有提示,因为它来自底层java,至少可以说是棘手的。
但是我会说UI的东西不是问题,钛控制自动将应用程序缩放到不同的设备屏幕(当设置打开时 - 应该看看1.7中的内容)。因此,一般来说,你将遇到的唯一问题是设备特定的事情,比如在IOS中有一个正确的导航按钮,没有等效的android,所以你必须编写一些特殊的东西,这是可以理解的,因为有2个不同的平台。
我不确定我会做什么,因为IOS已经完全开发,人们通常会这样做以避免两个平台的学习曲线并节省保持相同代码库的时间,不确定你有多大的好处将摆脱这一点。 Appcelerator很好,但是控件中存在错误,速度会慢一点,学习需要时间,但确实有好处。
我个人不会使用phonegap,因为我不喜欢它的想法,它基本上是一个webview包装器,我在桌面上有足够的基于浏览器的问题让我终生难忘。