你如何同时为*所有*手机/移动设备写作?
Posted
技术标签:
【中文标题】你如何同时为*所有*手机/移动设备写作?【英文标题】:How do you write for *all* phones/mobile devices simultaneously? 【发布时间】:2009-09-27 16:49:11 【问题描述】:我们创建在移动设备上运行的非游戏程序; iPhone、Windows Mobile、android、Palm WebOS 等。我们的主程序是用 C# 为 Windows Mobile 编写的,我们被要求将其移植到 iPhone。我们不期待:
-
学习曲线
Objective-C、XCode 和 Cocoa Touch。
维持两个的痛苦
保存产品的代码集
在两个不同的平台上同步。
我们已经决定,作为一项战略,我们希望同时在尽可能多的移动平台上创建所有新产品,这是一项艰巨的任务。
我们知道我们将不得不屈服于这些,但我们更愿意:
避免强迫我们的用户 连接到网络以使用产品。 没有一堆不同的集合 源代码。 支持尽可能多的移动平台 我们可以。我的问题是这样的; 您对针对 2 到 5 个最受欢迎的移动平台开发的最佳策略有何建议?
编辑:根据 cmets,我想澄清一下,我们的产品在 PalmOS 和 Winmobile 上都广受好评。它在两个平台上的工作方式完全相同,使用户可以轻松切换手持设备并继续使用它。
现在我们即将创建许多新的商业应用程序,并希望将其扩展到其他硬件/操作系统。您对在许多新平台上进行部署有什么建议?
【问题讨论】:
【参考方案1】:考虑通过网络实现您的应用程序。这违反了您对“避免用户连接到网络”的偏好,但出于以下原因考虑使用网络:
-
如果您的 C# 应用程序以正确的方式编写,您可以通过重用现有库向这些应用程序公开 Web 前端。
几乎所有现代移动平台都支持Web 2.0。
您的开发人员可以继续使用他们习惯使用的语言 (C#) 进行编写。
many advantages 用于编写 Web 应用程序与特定于平台的应用程序。
【讨论】:
我很惊讶没有人要求他查看离线网络应用程序,这些应用程序似乎符合未连接标准,同时保持了适应尽可能多的平台的目标。 无法连接的网络应用程序很难说 WIndows Mobile,但再过一两年,WinMob 将不再是问题。【参考方案2】:考虑 Appcelerator Titanium、Rhomobile 的 Rhodes、PhoneGap、xmlvm.org 或其他跨设备工具包。
【讨论】:
使用跨设备工具包将帮助您快速进入市场。但是,这将意味着您在所有设备上都会获得糟糕的用户体验。这对您的业务可能是致命的; iPhone 和 Android 用户有数千款应用可供选择,用户体验良好,变得挑剔。如果他们认为该应用程序不够像 Android 或 iPhone,他们会跳过您的应用程序。这很糟糕,因为 Android 和 iPhone 用户是您想要的,他们更有可能为应用程序付费。【参考方案3】:我假设您已经完成了市场调查,并且实际上知道所有平台都会盈利,而不仅仅是为了开发一两次而消耗您的资源。
除非你打破“不连接到互联网”规则,否则没有很好的答案。但是有一个很好的答案;普通的老C。
在普通的旧 C 中实现所有应用程序逻辑。然后;
iPhone - Objective-C 是 C 的严格超集,因此只需按原样使用代码即可。并使用 Cocoa Touch 在 Objective-C 中编写 UI。
Android - Android 的 Java 有 JNI 用于调用用 C 编写的本机代码。编写一个薄粘合层,并使用普通的 Android 的 Java 实现您的 UI。
Windows Mobile - 您可以从任何 .NET 应用程序调用本机代码。因此,编写另一个粘合层,并使用 C# 或您喜欢的 .NET 语言实现您的 UI。
Symbian - Symbian 使用 C++ 的变体,因此就像在 iPhone 上一样,您可以按原样调用 C 代码。使用 C++ 和 Symbian API 编写您的 UI:s.
如果您打破了“不连接到互联网” 规则,那么使用您现有的 C# 代码实现服务器并使用 HessianC# 将其公开为 Web 服务是轻而易举的事。然后,Hessian 实现适用于您可以安装应用程序的每部手机,自 2002 年左右开始销售。
【讨论】:
【参考方案4】:我建议您将应用程序的核心和 GUI 分开。因此,您可以继续使用 C# 为 Windows mobile 和 iPhoneOS 开发应用程序(感谢monoTouch)。使用此策略,您只需在 Windows mobile (C#) 和 iPhone (Cocoa Touch) 上开发特定的 GUI。
对于其他移动操作系统,您不能使用跨平台开发环境(目前)。您需要重新开发所有应用程序。
所以:
Windows Mobile:核心 (C#) 和 GUI(C#) iPhone:核心(C#)和 GUI(Cocoa Touch) Android:核心(Java)和 GUI(Java) 其他:取决于操作系统【讨论】:
MonoTouch 仍然没有答案。你仍然必须学习 CocoaTouch,然后在没有像样的调试器的情况下实现你的应用程序。 MonoTouch 也不会在 Android 上为您提供帮助。而是在 C 计划中编写您的应用程序逻辑。并编写三个不同的用户界面。 iPhone 上的 Cocoa Touch,Android 上带有 JNI 调用的 Java,以及 Windows Mobile 上带有本机调用的 .NET。【参考方案5】:虚拟化
我听说 VMWare 正在开发一种移动虚拟化产品,可以将平台统一到移动设备上的 VM 内的单个执行点,这取决于您是否着急。它几乎肯定会支持大多数智能手机平台(Windows Mobile、Android、Symbian、Blackberry 甚至 iPhone)。当他们支持所有人时,他们(和我们)肯定会受益最大。
如果你不着急,可以等一下。
【讨论】:
【参考方案6】:使用适用于 Iphone 的 c# 应用程序查看 Monotouch。它是 iPhone 的 .net 框架的 OSS 版本。
【讨论】:
【参考方案7】:我会反其道而行之,给你一些严厉的爱,而不是简单地回答你提出的问题。
我的想法是,为什么要制作 2-5 个版本的应用程序,充其量只能在所有平台上获得不冷不热的接收?因为那是你将要得到的。
如果您想制作广受好评的应用程序并让用户兴奋地使用它们,请让他们充分利用该平台。 iPhone 应用程序应该对用户输入进行深思熟虑,并利用尽可能多的平台功能,例如多点触控、轻松数据存储、加速度计、摄像头等。
Palm 应用在后台运行良好,因此请编写充分利用这一点的内容。它甚至可能不止一个应用程序来保持 Palm 简单而小巧的应用程序方法。
Android 应用可以更紧密地与系统集成,因此让它们这样做以造福于用户。
您使用任何应用程序的主要好处应该是您完全了解该领域,并且可以描述问题领域的哪些方面最适合任何给定设备的优势。移动应用程序很小(ish),您从尝试跨设备共享代码中获得的任何小收益(以及它如何在 Java/Obj-C 之间准确地工作,更不用说 Android 与 Blackberry 库的差异?)完全丢失在您的失真中通过适应的棱镜来理解。
【讨论】:
【参考方案8】:尝试使用PhoneGap!您只需要了解网络技术。
【讨论】:
【参考方案9】:你的问题有点晚了。但是您可以使用 Rhodes (http://rhomobile.com/products/rhodes) 为每个主要的智能手机操作系统编写代码。数以万计的其他开发人员这样做。 Rhodes 是第一个智能手机应用程序框架,也是唯一一个将 Web 开发人员所享有的 Model View Controller 优势提供给原生智能手机开发的框架。
【讨论】:
添加问题永远不会太晚。谢谢,亚当。以上是关于你如何同时为*所有*手机/移动设备写作?的主要内容,如果未能解决你的问题,请参考以下文章