有没有办法开发真正的NATIVE移动跨平台应用程序而不包装东西?

时间:2012-05-31 11:49:19

标签: mobile compiler-construction cross-platform

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

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

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

  • 速度和紧凑
  • 避免浏览器问题
  • 市场接受度
  • 避免轻松/'脚本小子“逆向工程

我尝试的产品:

  • Appcelerator(在我的系统上无法正常工作)
  • PhoneGap(不创建真正的原生应用)
  • Embarcadero radPHP EX2(使用PhoneGap)
  • Embarcadero radStudio EX2(无法创建移动/ Android应用程序?)
  • Adob​​e Flash Builder(效果非常好,但依赖于Air,因此应用程序非常庞大而且没有 振动等本机设备(可用,但必须写它 自己)
  • Flash Develop(但与Adobe Flash Builder相同)
  • .....和其他一些人;-)喜欢moSync ......

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

目标路线首先是Android,iOS,也可能是未来的Windows Phone。 注意:我没有Mac,所以我无法在Mac上编译它。

我想要的是不可能的,或者是否有这样的产品可以做到这一点?

修改: 看到我的回答,答案是否定的!

6 个答案:

答案 0 :(得分:7)

在问了这个问题2年后,我可以说:不,这是不可能的,这是一个神话。

我尝试过的所有产品都使用某种包装或使用第二种语言作为调用原生内容的图层。虽然这些库是原生的,但主程序却不是。使用smartface.io的Cosku的最新答案是一个很好的例子,他们声称它是原生的,但它不是。

为什么这么难?问题是平台所需的编程语言(使语言变得复杂的语言差异)。将第二种语言翻译成平台的主要语言及其特定的库是非常复杂的,只能通过使用本机二进制文件包装来实现这一点。第二个障碍是必须能够跨平台运行的所需编译器。

但是为什么依靠第二语言或第三方开发工具来构建应用程序时,输出大致相同是坏的,这个问题在这张图片中得到了很好的说明: http://xkcd.com/927/

图像是关于标准的,但这就是发生的事情,为标准创建新标准。例如,使用PhoneGap时,您必须学习PhoneGap API的基础知识。你依靠一个新的标准'致电PhoneGap。这个问题是你完全依赖PhoneGap的支持而存在。它可能会在应用程序的生命周期中引入第二个弱点。

IMO,如果你想把它包装成跨平台,依靠第三方产品和库是不明智的。更好的是自己写一个包装器,就像我做的那样,跳过膨胀。这一切的真正好处是你自己编写了包装代码,并且你理解了底层结构。此外,它更容易扩展或更改,您可以跳过您不需要的东西。

今天,我用最长的现有和稳定的语言创建和设计应用程序的用户界面。带有javascript界面​​的HTML。该应用程序也可以在浏览器中运行,并且在缺少特定功能时不会中断,例如振动。你不能用phonegap获得相同的结果,试试吧!您可以像普通网站一样轻松地设计具有响应技术的应用程序(例如在Android中试试这个;-))。从技术上讲,它可以在任何地方,浏览器或webview中的任何平台上运行,但不使用任何特殊的移动JavaScript库!你不需要这些特殊的库,真的,使用正常的'而是库版本。

我已经为它编写了一个编译器/混淆器来打包' UI-source只是一个将由本机shell加载的文件。这是为了保护源,因此不容易查看或修改源。

我唯一要做的就是支持app平台,为它编写一个本机包装器。如果某个平台由于某种原因而死(例如过去的Windows Mobile),我只需要为它编写一个新的包装器。这比从头开始再次编写整个程序更容易。此外,当有新平台时,它也可以在平台浏览器中运行。

如果您的应用不依赖于特定的硬件(如游戏),或者可以在没有特殊硬件要求的情况下运行,那么这就是延长应用生命周期的方法。使用HTML5和javascript设计GUI并使用本机shell来使用特定的OS功能。

慢吗?我不得不说。至少不要使用任何庞大而臃肿的特殊设计的移动JavaScript库,并且不要在触摸屏设备上使用点击事件,而是使用touchstart。此外,HTML引擎将得到改进,并且有更好的HTML5功能支持,使您能够编写功能强大的HTML5 Web应用程序,而无需使用本机语言实现此功能。

IMO,这是前进的方式(对我来说)和我寻找最佳方式的过程,开发跨平台的移动应用程序并延长生命周期。希望它也可以帮助你决定最好的做法。

答案 1 :(得分:5)

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

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

我与这两种产品无关......我只是喜欢它们。

答案 2 :(得分:2)

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

答案 3 :(得分: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,因为它无法在模拟器中运行,打包应用程序或运行任何没有它的代码。

如果你想制作应用程序你有两个选择,学习每个平台或使用这些工具之一,如果有一些魔术工具做了我保证它将是地球上最受欢迎的东西,你会听到关于它/发现它。

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分: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,或者钛(http://docs.appcelerator.com/titanium/2.1/index.html)。

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