使应用程序可以跨移动平台移植的最佳方法是什么?

时间:2011-09-18 18:42:03

标签: iphone android windows-phone-7

我正在研发适用于Android的应用程序,但希望将来将其移植到iPhone和(如果它在未来似乎获得显着的市场份额)WP7 / 8。
我对Android以外的任何移动平台一无所知。我应该使用C ++(NDK),Java还是其他东西来获得尽可能多的可移植性?我假设我必须重写(或有人重写)至少部分,但我想尽可能多地编写代码库。

编辑:这是一个简单的应用程序“扫描”条形码(相机)或输入数字,将一些信息发送到服务器,获取更多信息(可能是XML,但可能是最好的效果)并将其显示在几个简单的屏幕上。

编辑2:我所拥有的4个部分,以及理想的便携式设备:

  1. 扫描条形码(可能是最难携带的条形码)
  2. 允许手动输入条形码编号
  3. 发送和接收一些自定义数据
  4. 显示几个屏幕(如果我有一个让它看起来像“本机”的选项,可以是HTML格式,而不是显示网页的浏览器窗口)

6 个答案:

答案 0 :(得分:2)

对于非游戏的非平凡应用程序,目前还没有解决此问题的成熟解决方案。

像Titanium Mobile和PhoneGap这样的工具旨在帮助您完全按照自己的意愿行事,但对您的应用程序可以执行的操作施加限制,并且到目前为止处于开发的最前沿,他们经常会引入您自己的错误无法修复。此外,在支持WP7或Blackberry等替代平台时,您还是他们的开发人员的怜悯。在某些情况下,这些可能是值得冒险的,或者你可能会很幸运,但在急于使用它们之前你需要警惕。

通常,最好的技术仍然只是开发独立的代码库。您可以在架构术语中相互建模,如果这样做,通常不难在不同平台之间进行转换。

另一种有助于许多应用程序可移植性的技术是在有意义的情况下使用嵌入式Web浏览器。这允许您使用HTML / CSS / Javascript而不是本机UI工具设计一些视图,然后将它们加载到每个平台上的上述嵌入式Web浏览器中。

答案 1 :(得分:2)

取决于您的目标平台数量。

我有一些iPhone + Android的经验。老实说,我不会花太多时间在顶部学习可移植性工具。我已经完成了几个应用程序(简单的通信内容和轻量级游戏),我的经验到目前为止 - 假设您熟悉两者 - 它更快+更容易编写您的应用程序然后移植它。

除了正常的编码工作外,最困难的任务是开发包括主类和数据结构的应用程序结构 - 根据当然的结构,你可以基本上复制1对1而不是代码。

此外,由于你会不断在不同的平台上获得更新,比如iOS(Android + Eclipse有点慢,似乎提出了更新/升级),这让生活变得更加轻松,你很可能会有一个很大的劣势什么时候依赖别人可移植性开发工具包。

到目前为止 - 当然不能作为一般规则 - 虽然iPhone上的开发占100%,但在Android上移植最多需要30-40%

答案 2 :(得分:1)

这个问题过于宽泛,取决于你正在做什么样的应用。

一般来说,如果你做一个网络应用程序一样好,那就去做吧。它可以在不同的平台上运行。

答案 3 :(得分:0)

Xamarin(以前由Novell拥有)的

MonoTouch / MonoDroid允许您分别为iOS / Android编写C#(WP7使用的语言)。但是,这不是免费的。

我不相信框架甚至包括跨平台UI,但我认为这可能是一件好事。至少您的应用程序逻辑可以在不同平台上保持不变。

我自己没有使用过该框架,所以我无法保证它。

答案 4 :(得分:0)

我们确实使用MonoTouch / MonoDroid,它可以帮助我们同时支持WM / WP7 / Android / iOS。所有这些平台的共同点(在使用Xamarin产品之后)是.Net。

我们公司的政策是为所有提供类似UI的平台维护工具包。然后,应用程序可以几乎与平台无关的方式编写。但是,这不是一般性陈述,因为独立性是指特定类型的应用程序。

我不建议您使用我们的工具包,因为它看起来像是一种矫枉过正。但是,投资C#/ .Net可能不是一个坏主意。

答案 5 :(得分:-1)

U绝对应该采用最简单的方法:Java。 在移植时你仍然需要做很多工作,但如果你使用的是NDK,那么Android本身的开销可能会相似。 (在一般应用程序中。由于你没有提供太多关于项目的信息,答案可能更具体。如果你正在开发一个性能关键的应用程序,比如3D游戏,你应该考虑NDK用于高porfile程序部分)

编辑:对于这个扫描解决方案,我会在Android上使用Java并且不会担心可移植性。对于具有如此干净的应用程序逻辑的项目,它不值得努力使其可移植(除非项目的目的是试验应用程序的可移植性,但据我所知,它不是)。