11

我试图找到一种方法来开发真正的原生移动应用程序,跨平台。我发现的工具数量巨大,非常庞大。

我尝试过的所有工具都“说”最终结果将是原生的,但实际上并非如此。它是一个可执行文件,其中包含一个网络浏览器和一些额外的本机层/框架,用于设备特定的功能。

我想要一个真正的原生应用程序的原因是:

  • 速度和紧凑
  • 避免浏览器问题
  • 市场接受度
  • 避免 easy/'script Kiddie" 逆向工程

我试过的产品:

  • Appcelerator(在我的系统上无法正常工作)
  • PhoneGap(不创建真正的原生应用程序)
  • Embarcadero radPHP EX2(使用 PhoneGap)
  • Embarcadero radStudio EX2(无法创建移动/安卓应用程序?)
  • Adobe Flash Builder(工作得很好,但依赖于 Air,所以应用程序很大,没有振动等原生设备(可以,但必须自己编写)
  • Flash Develop(但与 Adob​​e Flash Builder 相同)
  • ..... 和其他一些 ;-) 像 moSync ......

目前我已经下载了“RhoStudio”,但对它有些怀疑,因为在介绍视频中他们谈论了我不想要的东西。

目标方向首先是 Android、iOS,也许是未来的 Windows Phone。注意:我没有 Mac,所以我无法在 Mac 上编译它。

我想要的是不可能的,还是周围有这样的产品可以做到这一点?

编辑:看我的回答,答案是否定的!

4

6 回答 6

7

在问了这个问题 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,这是(对我而言)要走的路,也是我寻找跨平台开发移动应用程序并延长生命周期的最佳方式的旅程。希望它也可以帮助您决定什么是最好的。

于 2014-06-18T21:38:08.140 回答
5

对于跨平台的原生 iOS、Android、Mac 和 Windows 应用程序,请查看Xamarin。C# 中的代码,编译为本机。对于 iOS,您可以利用 XCode 工具进行应用程序布局,并且 Xamarin Studio 与它非常干净地集成。

为了完整起见,PhoneGap 在TRIGGER.IO中有一个有价值的(是的,基于 WebView 的)竞争对手。虽然它的方法类似于 PhoneGap/Cordova,但它改进了用于访问本机功能的 API,简化了推送通知,并执行更快的云构建。

我与这些产品中的任何一种都没有任何关系……我只是喜欢它们。

于 2013-12-06T00:46:15.040 回答
2

你试过www.codenameone.com吗?它是开源的,基于java的,只需要eclipse或netbeans来开发。

于 2013-02-17T07:41:51.887 回答
1

首先

Appcelerator (does not work correctly on my system)

您面临某个问题吗?收到java错误或其他东西,可能没有正确设置。

简短的回答是否定的,你必须有一定程度的抽象才能实现这一点,java和objective-c是完全不同的语言,Android和IOS SDK有不同的方法、过程、风格、设计等。没有在没有中间层来转换或渲染的情况下让两者都工作的方法。

Appcelerator 将是您所寻找的最接近的东西,因为它不像其他的那样是 webview 包装器,它确实解释了 javascript,但是因为它没有包装在 webview 中,所以您避免了浏览器问题。

速度和紧凑性更多地取决于您对应用程序的编码方式而不是其编码方式,真正的 Titanium 应用程序将由于库而在尺寸上更大,但这并没有因此而变得糟糕,获得 2 个应用程序的好处很重要我认为额外的几兆字节。

我很确定所有这些工具都有市场接受度,因为没有它它们就不会成功,同样,对于苹果之类的要求,它取决于你设计它的方式,而不是后台的工具。

如果你想使用 IOS,你将需要一个 mac,如果你想单独在应用商店中发布,你需要 xcode 和构建的项目来使用应用程序加载器,我不知道有任何工具(甚至是 webview 包装器)不需要您拥有 IOS SDK,因为它无法在模拟器中运行、打包应用程序或运行任何代码。

如果你想制作应用程序,你有 2 个选择,学习每个平台或使用其中一种工具,如果有什么神奇的工具可以做所有事情,我保证它会是这个星球上最受欢迎的东西,你会听说过 /找到了。

于 2012-05-31T12:21:24.827 回答
0

这也是“云”如此受欢迎的原因之一。您无需多次编写应用程序,而是在服务器上编写所有功能。然后,实际的“应用程序”只是您对功能的用户界面,根据您的需要,这可能非常简单。如果就这么简单,那么您可以为每个平台单独编写应用程序,但它们都将使用相同的“云”后端。

如果我没记错的话,这代表了大多数拥有云架构的公司的应用程序所做的事情,也是许多需要数据连接的原因。

我认为没有某种包装器或层就不可能编写一次并在任何地方运行,这是因为每个平台都有单独的 API 甚至编程语言。例如,您将很难编写一组在 Apple 和 Android 设备上本地运行的源代码。这并不是说这在技术上是不可能的,桌面操作系统多年来一直使用 C/C++ 具有这样的交叉编译可移植性,而 Java 只是让这变得更容易。当然,移动操作系统的工程师们似乎并不认同可互操作 API 的愿景。

总而言之,我建议 A) 编写应用程序两次(我知道这很糟糕,但它将在两种设备上提供本机执行的可靠性,并且可以以最小的痛苦完成)或 B) 分解并使用“脚本”之一-kiddie”框架。如果您的应用程序足够简单,这些实际上可能并没有那么糟糕,而且它可能根本不是那么可逆向工程的。如果有人对最好的“近乎原生”跨平台框架有任何建议,那将很有用。

于 2012-05-31T12:05:00.080 回答
0

好吧,有几件事需要考虑,如果你想要原生的外观和感觉,有像 Sencha(www.sencha.com) 和 Kendo UI(http://www.kendoui.c​​om/) 这样的框架可以在 JavaScript 端模拟它。我发现它们在 Android 和 iPhone 上都很好看,但还不支持 Windows Phone。

如果您正在寻找结合 HTML 的真正原生小部件,您可以查看 MoSync 的 Native UI(http://www.mosync.com/documentation/manualpages/jsnativeui-library),它也支持 windows phone Metro UI,或者 Titanium(http ://docs.appcelerator.com/titanium/2.1/index.html)。

无论如何,另一件事是您可以使用诸如 Phonegap 或 MoSync 或 AppMobi 之类的打包程序(我认为它使用类似于 PhoneGap 构建的东西)来包装您的应用程序并将其放在应用程序市场上。从这些列表中,PhoneGap 特别不是旨在为您提供任何特定的 UI 功能,尽管我已经看到一些尝试将标签栏插件添加到 Phonegap。

于 2012-08-08T14:37:56.343 回答