在问了这个问题 2 年后,我可以说:不,这是不可能的,这是一个神话。
我尝试过的所有产品都使用某种包装或使用第二语言作为调用本机内容的层。尽管库是本机的,但主程序不是。Cosku 与 smartface.io 的最新答案就是一个很好的例子,他们声称它是原生的,但它不是。
为什么这么难?问题在于平台所需的编程语言(使其复杂的语言差异)。将第二种语言翻译成平台的主要语言和它的特定库太复杂了,你只能通过使用本机二进制文件包装来实现这一点。第二个障碍是需要能够跨平台运行的编译器。
但是为什么在输出几乎相同的情况下依赖第二语言或第三方开发工具来构建应用程序是不好的,这个问题完美地说明了这个问题:http:
//xkcd.com/927/
图像是关于标准的,但这就是发生的事情,为标准创建了一个新标准。例如,在使用 PhoneGap 时,您必须学习 PhoneGap API 的基础知识。您依靠“新标准”呼叫PhoneGap。问题在于您完全依赖 PhoneGap 支持及其存在。它可能会在应用程序的生命周期中引入第二个弱点。
IMO,如果您想包装东西以使其跨平台,那么依赖第三方产品和库并不是一个聪明的主意。更好的是自己编写一个包装器,就像我一样,跳过臃肿。这一切的真正好处是您自己编写了包装器代码并且您了解底层结构。此外,它更容易扩展或更改,您可以跳过不需要的东西。
今天,我使用 JavaScript 界面,用现存最久、最稳定的“语言”HTML 创建和设计应用程序的 UI。该应用程序也可以在浏览器中运行,并且在缺少特定功能(例如振动)时不会中断。用phonegap不能得到同样的结果,试试吧!您可以像普通网站一样使用响应式技术轻松设计应用程序(例如,在 Android 中尝试 ;-))。从技术上讲,它可以在任何地方运行,在浏览器或 web 视图中的任何平台上,但不使用任何特殊的移动 javascript 库!你不需要这些特殊的库,真的,使用“普通”库版本来代替。
我已经为它编写了一个编译器/混淆器,以便将 UI 源“打包”到一个文件中,该文件将由本机 shell 加载。这是为了保护源,所以不容易查看或修改源。
为了支持应用程序平台,我唯一要做的就是为它编写一个本地包装器。如果一个平台由于某种原因死掉了(例如过去的 Windows Mobile),我只需要为它编写一个新的包装器。这比从头开始重新编写整个程序更容易。此外,当有新平台时,它也可以在平台浏览器中运行。
如果您的应用程序不依赖特定硬件(如游戏)或无需特殊硬件要求即可运行,这是延长应用程序生命周期的方法。使用 HTML5 和 javascript 来设计 GUI,并使用本机 shell 来使用特定的操作系统功能。
慢吗?我不得不说不。至少不要使用任何庞大而臃肿的特殊设计的移动 javascript 库的东西,不要在触摸屏设备上使用 click 事件,而是使用 touchstart。现在 HTML 引擎也将/得到改进,并且对 HTML5 功能有更好的支持,使您能够编写功能强大的 HTML5 webapps,而无需用本机语言实现它。
IMO,这是(对我而言)要走的路,也是我寻找跨平台开发移动应用程序并延长生命周期的最佳方式的旅程。希望它也可以帮助您决定什么是最好的。