2

所以我一直在为 iPhone 开发一个中型企业应用程序,我可能需要移植到 Android 上。我使用原生 iOS SDK 编写了应用程序,完全不关心可移植性。我最初对不得不用 Java 重新编写整个应用程序并维护两个代码库感到畏缩,因此我研究了一些跨平台选项。

我在两个跨平台应用程序和一个使用原生 SDK 的应用程序中编写了一个简单的“hello world”,只是为了感受每个平台的性能和稳定性。这绝不是一个完全详尽的实验,只是快速而肮脏的测试。我惊讶地发现 PhoneGap 和 Appcelerator 的 Titanium 有一个非常明显的启动时间,只是为了显示“hello world”。此外,如果我关闭应用程序然后快速连续重新打开它(30-40 快速迭代),PhoneGap 和 Titanium 都会崩溃。另一方面,本机应用程序从未出现任何问题。

最初,我认为我可以忍受较慢的启动时间,因为承诺一个代码库可以统治所有这些。然后我遇到了以下潜在的障碍:

  1. 调试支持似乎有限。

    根据 phone gap wiki,建议您在桌面上调试 (1) (2) 使用远程 Web 检查器 (3) printf 调试 [你在开玩笑吗?] 或 (4) 使用weinre

    Titanium 的调试稍好一些,但仍然缺乏设备调试支持。有一个开放的设备调试请求已有一年之久,因此将来可能会得到修复。

    对于只有少数开发人员的小型项目,调试可能不是问题,但随着项目变得越来越大并且越来越多的开发人员在相同的代码库上工作,它很快变得非常重要。

  2. 您仍然需要为每台设备调整 UI。

    对于某些人来说,这可能会或可能不会担心,但我希望我们的应用程序看起来像原生应用程序并遵循每个平台的人机界面指南。所以我仍然会在 UI 层有重复的代码。

在这一点上,鉴于我必须为每个设备拥有单独的 UI 代码,并且设备上的调试选项不如原生应用程序丰富,我看不到跨平台开发框架会带来的节省。我认为最好的方法是用 C 重写我的模型,然后我可以在 Android(使用 NDK)和 iOS 之间共享该代码,每个设备都有自己的本机 UI。

所以我的问题是,有人对跨平台移动框架有什么经验吗?我对有限调试和重复 UI 代码的担忧是没有根据的吗?请记住,我想要一个看起来像每个平台的本机应用程序的应用程序。

对于那些使用过跨平台框架的人来说,这个项目有多大?你遇到了什么问题?你会再次使用这个框架吗?

-谢恩

4

1 回答 1

1

我已经使用了相当多的 appcelerators 钛。我的总体感觉是 IOS 部分非常好,但 android 仍然缺乏,特别是在错误消息中,调试还不错,您只需添加一些打印输出,但问题是 99% android上的错误将类似于app crashed with nullPointerException,没有任何提示,因为它来自底层java,至少可以说很棘手。

但是我会说 UI 的东西不是问题,钛控制自动将应用程序缩放到不同的设备屏幕(当打开设置时 - 应该查看 1.7 中的这个)。所以通常你会遇到的唯一问题是设备特定的东西,比如在 IOS 中有一个正确的导航按钮,没有 android 等价物,所以你必须为此编写一些特殊的代码,考虑到有 2 个不同的平台,这是可以理解的。

鉴于 IOS 已经完全开发,我不确定我会做什么,人们通常会这样做以避免两个平台的学习曲线并节省时间以保持相同的代码库,不确定你会从中获得多少好处这个的。Appcelerator 很好,但控件有错误,它会更慢,学习需要时间,但它确实有好处。

我个人不会使用 phonegap,因为我不喜欢它基本上是一个 webview 包装器的想法,而且我在桌面上遇到了足够多的基于浏览器的问题,足以让我终生受益。

于 2012-06-18T10:43:00.910 回答