原生Android / iOS开发vs Marmalade SDK

我们公司正在挑选原生Android / iPhone开发和一些跨平台解决scheme,特别是Marmalade SDK(原Airplay SDK)。

我们是一家计算机视觉公司,这意味着我们需要低级别的摄像头设备。 而且,我们的应用程序在计算上是昂贵的,这意味着我们倾向于挤出可用的每一点处理能力。

我们的团队在Objective-C和Java(或C)方面都有足够的经验来提供平台特定的解决scheme。 然而,我们的主要焦点始终是C ++,因此我们希望防止团队分裂,而采用跨平台的解决scheme。

我们最大的担忧是,selectMarmalade会牺牲处理速度(主要关注点),或者通过复杂化低级访问相机帧缓冲区来严重增加开发时间。

所以我的问题是,除了显而易见的优点之外,还有Marmalade SDK对处理器密集型video处理应用程序的特殊限制。

我已经在我的独立游戏公司使用了近两年的果酱/ Airplay。 对我来说这是一个胜利,因为我只是一个程序员,而且我可以使用MS Dev Studio(这是我目前最喜欢的开发环境)在Windows中做几乎所有的工作,因为它使我不必处理大量的特定于平台的细节,尤其是各种开发工具,可能会让我花费大量时间花在游戏内容上。

速度不会是果酱的问题。 你的C ++代码本身运行。 另外,访问相机和其他function应该不是什么大问题; 它已经提供或可以使用扩展SDK添加,这是非常简单的使用。

Marmalade是一款成熟的产品,即使对于那些免费使用这款产品的独立开发者来说,该公司也可以快速解决问题。 除了跨平台性之外,它还内置了一些很好的工具,如内存泄漏跟踪器,日志logging系统,graphics分析工具等等。

我在果酱方面遇到了一些不足之处。

  1. 尽pipe理论上任何API或第三方SDK都可以通过扩展系统访问,但实际上您所需要的东西可能还不存在。 例如,许多开发人员正在努力将Flurry分析包整合到一起,对于一些人来说这是一个挑战。 这种情况与许多其他第三方SDK类似。 如果你正在做Objective-C开发,它们可能只是一些整合,但通过Marmalade可能会更困难。

  2. 有些事情是不太自然的,因为你经营的跨平台层。 我的一些例子是:

    • 我很难让我的启animation面(应用程序启animation面)在iOS和Android上的所有屏幕尺寸上正确显示。 在Marmalade应用程序本身的设备加载和Marmalade加载应用程序代码的步骤之间进行转换时,很难让它们在没有闪烁,短暂中断期间或图像大小调整的情况下显示。

    • 果酱强加了一个非常简单的记忆模型,在那里你得到一个固定的堆,所有的内存分配是通过果酱完成的。 从系统的angular度来看,该应用程序只有一个大块(或几个大块)的内存。 这有一些优点,但我有问题,例如,在接收内存警告,并期望抛弃任何不必要的资源iOS模型的平方。 这似乎是一个“一刀切”的实际结果,实际上失去了一些关键的function。

    • 您可以使用扩展pipe理器和其他一些方法来显示原生UI元素,但是集成大量的本机外观UI将是一个挑战。 所以如果你的应用程序是类游戏,用户可以处理非标准的button等等,那很好,但如果你预计需要重要的本地用户界面,那就更困难了。 最近的Marmalade版本增加了一个原生的UI框架,可以让你以通用的方式指定标准的UI元素,然后使用相应的widget来实现设备。 我没有用过,但看起来相当全面。]

  3. 如果遇到问题,通常不清楚是普通操作系统问题还是果酱问题,尝试寻求帮助可能是孤独的。 例如,我最近在iOS和Android上添加了应用内购买到我的游戏。 IAP是具有挑战性的,即使没有额外的SDK层,也有很多特殊情况需要处理。 在我的情况下,我遇到了一个情况,我的应用程序被苹果拒绝了一个小问题,而当它处于被拒绝状态时,我的应用程序内购买也处于“被拒绝”状态(即使没有任何关于IAP本身,这只是苹果stream程的一个怪癖)。 当我试图回归testing应用程序内购买function(当我提交这个非应用程序内购买相关问题的修复)时,游戏实际上是崩溃的,而不是得到适当的错误结果。 我能够确定崩溃不在我的游戏代码中,所以它是OS(不太可能)或Marmalade中间层来处理应用程序内购买callback(这就是事实certificate[更新11 / 28/2012:Marmalade已经在最近的SDK更新中解决了这个问题])。

    所以在这样的情况下,你可以尝试Stack Overflow来获得帮助,但真的没有人会帮助你,所以你依靠Marmalade团队来回答你的问题。 正如我所说的,他们在这方面做得相当不错,但是在世界范围的常规iOS程序员社区中,无法与来自Stack Overflow的即时响应竞争。 所以我会说这最后一个是我使用像果酱这样的系统最关心的问题。 它可以节省您的时间,而不必提前加速各种平台SDK的细节,但是如果遇到问题,您可以马马拉德酱团队(或友好的果酱社区成员)“摆布”你有一个答案。 (请记住,我正在写作一个免费的独立开发者,他们只是在问题解决方面获得标准的优先权,您可以付费以保证快速解决scheme。)对于我个人来说,很难继续回到我的制作人手中,说:“我正在等待这个Marmalade家伙的答案。”

    (第三个问题的另一个例子是,直到最近,在某些Android设备上音效出现延迟的问题,这是一个Marmalade问题,他们最终解决了这个问题,但是花了一些时间,基本上没有什么可以做的同时。)

请记住,即使没有Marmalade(正如其他响应者指出的那样),您仍然可以在iOS或Android上使用C ++的大部分代码。

尽pipe上面列出了很多潜在的问题,但我是Marmalade的粉丝,我很欣赏公司为我提供的所有免费服务。 当涉及到其他平台的时候,这个工具真的很有用,比如(对于我)bada或PlayBook。 如果你想使自己的生活变得更加艰难,你真的可以从舒适的PC和开发人员工作室(或者使用xcode的Mac)部署到各种各样的设备。 他们拥有的模拟器工具非常棒,只有less量的实例需要在设备本身上进行debugging。 一般来说,如果它在模拟器上工作,它只是工作。 IdeaWorks面临着巨大的挑战,他们在所有这些平台上(即所有重要的设备,除了Windows Phone之外,都在为所有这些function(即,基本上所有在移动设备上提供的function) 7,因为它目前不允许本地代码)。 它只是有一些注意事项。

作为Marmalade的首席技术官,我是有偏见的,但是如果你的关键要求是(1)摄像头访问和(2)“挤出每一点点处理能力”的能力,那么Marmalade是一个不错的select。

Marmalade将您的C / C ++编译为本地ARM(或x86)指令…不需要转码,不需要虚拟机。 现有的C / C ++代码非常简单,支持几乎所有的C / C ++标准库等等。您可以在项目中使用ASM代码。 此外,无论您在哪个平台上部署,都可以在Windows或Mac上进行所有开发(是的,您甚至可以纯粹在Windws上编译/testing/部署到iOS)。

据我可以告诉你从Android开发:从Android本身的相机API似乎是一个小错误(例如:在2.1之前,没有解决scheme让相机显示在肖像模式没有扰乱图像)。 另外一个抽象层可能会更好(在可访问性,function等方面),甚至更糟糕。 它为舒适做了什么:它窃取资源,这可能是您自己的应用程序所需要的。

果酱提供了一个很好的原生扩展框架

http://www.madewithmarmalade.com/marmalade/features/extensions-development-kit

这最终意味着你可以直接跳转到任何特定function的本地实现。 您仍然保留主应用程序跨平台开发的核心优势。

同样在android上,因为marmalade使用android NDK,你的c ++代码处理数据将会比相应的android Java代码运行得更快。

我使用Marmalade制作游戏以及扩展和原生代码的速度让我非常有信心能够提供至less “原生”的应用程序。

我会使用MoSync Android / iOS,但我会说,因为我在MoSync工作。

但平心而论,我更喜欢MoSync Camera API。

如果你真的想挤出所有的处理能力,你应该使用ASM。

/托尼

果酱没有坏,我在2013年使用它。一些错误,一些烦恼(固定内存池),但总体来说不是一个糟糕的经历。

唯一真正令人失望的是缺乏对Linux的支持。 我看不出Marmalade家伙如何支持像Blackberry这样的晦涩难懂的平台,而不是Linux。 这个不成立。 也许这会随着Steam OS(一个基于Linux的,以游戏为中心的平台)的成熟而改变,尽pipeSteam操作系统现在并没有在其他操作系统带来的东西上带来很多东西。