开发跨平台移动应用程序[关闭]

Posted

技术标签:

【中文标题】开发跨平台移动应用程序[关闭]【英文标题】:Developing cross platform mobile application [closed] 【发布时间】:2010-07-30 07:23:14 【问题描述】:

越来越多的移动平台正在推出,并且 sdk 可供开发人员使用。有多种移动平台可供选择: androidios、Moblin、Windows mobile 7、RIM、symbian、bada、maemo 等。

而跨平台应用的制作更是让开发者头疼的问题。我正在寻找跨平台的通用事物,这将有助于希望将应用程序移植到所有平台的开发人员。比如差异屏幕分辨率、输入法、open gl 支持等。 请分享您知道的任何平台的详细信息。

或者是否有可能,通过在 html 中编写代码(小部件类型的东西)并将其加载到本机应用程序中。 我知道android,我们可以通过调用setContentView(view)将web视图添加到应用程序中

请分享课程详情,我们可以将 html 视图添加到您知道的不同类型平台的原生应用程序中。

此线程的目的是在开发人员之间分享共同的细节。标记为社区 wiki。

跨平台工具和库

XMLVM、Codename One 和 iSpectrum(从 Android 应用交叉编译 Java 代码或从头开始创建一个

Phone Gap(跨平台移动应用)

Titanium(使用 Web 技术构建原生移动和桌面应用程序)

单声道触控(C# for iphone)

rhomobile - http://rhomobile.com/ 样品在这里:http://github.com/rhomobile/rhodes-system-api-samples

Sencha Touch - Sencha Touch 是一种 HTML5 移动应用程序框架,可让您开发在 Apple iOS 和 Google Android 触摸屏设备上具有原生外观和感觉的 Web 应用程序。 http://www.sencha.com/products/touch/

Corona - Iphone/Ipad/Android 应用程序跨平台库。太厉害了 http://anscamobile.com/corona/

将现有 Android 应用程序移植到 Windows Phone 7 的指南 http://windowsphone.interoperabilitybridges.com/articles/windows-phone-7-guide-for-iphone-application-developers

Jquery Mobile针对智能手机和平板电脑的触控优化 Web 框架

【问题讨论】:

虽然我发现了一个与此相关的有趣线程,***.com/questions/3326110/… 另一个关于跨平台开发的好帖子:***.com/questions/51988/… 投票将其作为副本关闭。这太重要了,不能分成两个问题。 ***.com/questions/51988/… 我最近在博客上写过这个stronia.com/2014/05/building-cross-platform-mobile-apps.html 【参考方案1】:

我的回答 here covers some of the technical limitations of cross-platfrom tools 但让我扩展一下:

我认为跨平台工具在历史上一直都是失败的,因为这些工具的哲学重点是错误的。

跨平台工具的所有卖点都是它们为开发人员带来的好处。他们的卖点是允许开发人员在任何地方编写一次运行。他们的卖点是允许开发人员在不学习新 API 的情况下扩大市场。他们的卖点是他们允许开发人员削减成本和上市时间。

出售的跨平台工具是它们为最终用户带来的好处

对最终用户的好处不是卖点,因为跨平台开发很少对最终用户有利。最终用户并不关心开发人员需要付出多大的努力才能将产品推向市场。当他们只使用一个平台时,他们也不关心应用程序可以在多少个平台上运行。他们只关心应用程序是否在他们需要运行的硬件上完成了他们需要的工作。除非他们有在许多不同平台上运行应用程序的特定需求,否则它确实不会给他们带来任何价值。

相反,制作跨平台 API 不可避免的妥协意味着由 API 创建的所有应用在每个平台上最多只能达到 B 级。它们永远不会是在每个平台上使用的最佳工具。

所有这一切意味着,在大多数用例中,与使用特定平台 API 制作的产品相比,跨平台工具为最终用户提供的产品质量较差。最终用户总会有更好的选择。

从长远来看,您可以通过为最终用户提供最有用的工具来赚钱。如果您不从哲学上专注于让最终用户的生活更轻松、更高效,那么您从一开始就注定要失败。最终用户有很多选择,如果你的工具不是最好的工具之一,你就不会在市场上生产它。

仅当您认为“用户将从在许多不同平台上运行此应用程序中真正受益”时,您才应该使用跨平台工具。如果您开始寻找跨平台工具只是因为它们会让您(开发人员)的生活更轻松,那么您选择它们​​的原因是错误的,它们对您的伤害大于帮助。

【讨论】:

对开发人员而言,更少(不必要的)工作意味着更快的更新周期、更快的新功能、更快的错误修复等等。用同样的人力可以做更多的事情。我认为这对最终用户有利。 理论上,更快的开发可能对最终用户更好,但这并不是大多数跨平台 API 的哲学基础。我已经看到在许多环境中使用此类工具的许多尝试,并且重点始终是让开发人员的生活更轻松,而以牺牲最终产品的质量为代价。此外,更快、更便宜的承诺很少兑现。似乎总是在某个地方出现停车障碍,从而节省了大部分时间。 为了说明我的观点,请考虑以下几点:跨平台 API 存在于许多不同类别的硬件和操作系统中。您个人经常使用多少个跨平台应用程序?您曾经使用过多少您认为不错的跨平台应用程序?人们一直在推动跨平台 API,因为它们不止一个平台,但他们从未真正在任何地方取得成功。他们没有成功,因为他们没有为最终用户开发出最有用的应用程序。 @TechZen -- 我现在在我的网络浏览器上使用 ***,没有任何理由寻找本机客户端。我认为你过度概括了你的主张。 我很不高兴这种主观的哲学辩论在技术网站上得到了正确的标记。更糟糕的是,这篇文章的论点对我们今天使用的大多数主要软件都无效:Web 浏览器是跨平台的; Photoshop、MS Office、Dropbox 等都是跨平台的;只需打开您的开始菜单或 Finder 并列出特定于平台的人员 - 最有可能找到小型实用程序。如果您认为手机完全不同(一个非常有效的假设),您的论点将是有效的,但似乎没有任何论据可以建立这一基础。【参考方案2】:

在移动设备上进行跨平台开发有多种方法。当然,它们都有局限性。没有任何解决方案能够像原生应用程序那样利用设备的所有功能。

重复使用代码

虽然所有移动操作系统不使用相同的开发语言和 API,但有时您可以共享一些类或逻辑层代码。

例如,C++ 可能可以重用 for an iOS application,通过使用 NDK 用于 Android 应用程序,用于 Symbian 应用程序,因为它们是用 C++ 开发的,等等。

一些解决方案还提供了以设备通常使用的语言以外的其他语言编写应用程序的可能性。最著名的(实际上是我知道的唯一一个)是商业的,基于Mono project(C# 开发):

MonoTouch iPhone [1] MonoDroid 适用于 Android(仍在开发中) Similar project for BlackBerry(仍在开发中)

但我不确定我们是否真的可以称之为跨平台开发,因为代码的重用受限于设备:

Windows Phone 7 将不允许本机代码开发(可能会进一步更新) AFAIK 单声道项目并不适用于所有平台(还没有?)bada、webOS、maemo 等。

而且 UI 部分也保持特定于每个设备。

网页开发

当问及移动设备的跨平台开发时,一个常见的答案是 Web 开发。然后我们需要一个包装器,它会使用移动浏览器,让它看起来和表现得像一个原生应用程序。这就是我们将在工作中进一步看到的一些跨平台框架的方式。

HTML5 的兴起为 Web 开发带来了只能通过本地应用程序(如地理定位、离线应用程序、本地存储)完成的功能。

通过利用最新的网络标准 HTML5、CSS3、Js,我们可以找到越来越多的框架来开发具有原生外观和感觉的移动网络应用程序:

Sencha Touch JQTouch based on jQuery JQuery Mobile framework

但 HTML5 还很年轻,实现可能因浏览器而异。大多数默认移动浏览器使用 WebKit 引擎(主要例外是使用 Internet Explorer 的 Windows 移动/电话),即使如此,它们也不一定是 support the same functionalities。本地数据库仍然难以使用,我们无法确定不同浏览器将如何实现它。此外,即使使用 HTML5,与原生应用程序相比,Web 开发仍然非常有限。您无法访问联系人、相机、加速度计等。

编辑:本月早些时候,W3C 发布了一些关于 HTML5 演变的警告:Article from ZDNet

因此它只适合有限类别的应用程序。

跨平台框架

而且我们拥有跨平台的移动应用程序框架。您大概可以使用它开发一次并在不同的平台上部署。这些解决方案通常侧重于 iOS 和 Android,并依赖于 WebKit 引擎。在使用 Web 技术进行开发的同时,它们提供了与电话功能的更多交互。最著名的是 Nitobi PhoneGap、RhoMobile Rhodes、Appcelerator Titanium。但是许多其他人都在那里并且并不都使用像 MoSync 这样的技术,在为所需的平台编译代码之前将您的代码翻译成它自己的中间语言。

[ 1 ] 请记住,Apple 有一个special policy 关于为他们的平台编写的应用程序。他们目前似乎没有阻止这些应用程序,但这是一个应该考虑的信息。 编辑:自 9 月 9 日以来,Apple 已更改 this policy。

【讨论】:

【参考方案3】:

在部署为 web 应用程序(如上所述的 html5)时,您会获得一些共性,但对于丰富的原生应用程序,API 对于各种智能手机来说是完全不同的。

HTML5 可能会有所改进,但要做一些有趣的事情,你需要原生化。

有诸如 Phonegap 之类的“跨平台”智能手机框架,但我听到的大多是关于将其用于“实际”工作的坏消息。 (很多开销等)

【讨论】:

【参考方案4】:

是的,html5 正在引起一些关注。你还应该看看这个在第四季度推出的联盟和平台。 不确定该项目是否成功,因为这听起来像是一个巨大的挑战,但这里有详细信息:

网站: http://www.wholesaleappcommunity.com/default.aspx

新闻: http://news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=en&q=%22Wholesale+Applications+Community%22

WAC 旨在发布其最初的 规格及其组成部分 11 月向开发人员提供 SDK。这 规范将基于 W3C 标准,打造强大平台 用于开发富移动网络 应用程序。 WAC 还将提供 设备的向后兼容性 基于当前的 JIL 和 BONDI 规格。 (http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021)

它是一个由大约 25 家电信公司组成的国际联盟,旨在创建一个向所有开发者开放并向所有手机用户销售的平台。 (http://www.downloadsquad.com/2010/02/15/atandt-wholesale-applications-community-is-a-platform-not-an-app/)

【讨论】:

【参考方案5】:

据我所知,这些设备中的大多数都可以运行:

Java ME - the Most Ubiquitous Application Platform for Mobile Devices

我认为这既可以作为好例子,也可以作为坏例子。

【讨论】:

其实iPhone上没有java,据我所知java me在android上也没有运行 Android 开发大量使用 Java。 developer.android.com/reference/java/net/package-summary.html 我不知道细节,但 Avian JVM 允许 java 在 iOS 设备上运行。

以上是关于开发跨平台移动应用程序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

跨平台移动开发做了哪些工作? [关闭]

2D 跨平台游戏开发引擎 [关闭]

跨移动平台编程[关闭]

哪个跨移动平台应用程序和 UI 框架? [关闭]

收益最高的移动广告聚合平台--KeyMob

移动开发 - 原生 VS 跨平台 VS JavaScript [关闭]