本机Android/iOS开发与Marmalade SDK

Aba*_*bai 38 android cross-platform ios airplay marmalade

我们公司即将在本机Android/iPhone开发和一些跨平台解决方案之间进行选择,特别是Marmalade SDK(以前的Airplay SDK).

我们是一家计算机视觉公司,这意味着我们需要对相机设备进行低级访问.此外,我们的应用程序计算成本昂贵,这意味着我们倾向于挤出可用的每一点处理能力.

我们的团队在Objective-C和Java(或C)方面拥有足够的经验,可提供特定于平台的解决方案.然而,我们主要关注的是C++,因此我们希望防止碎片化团队,而是使用跨平台解决方案.

我们最担心的是选择Marmalade会牺牲处理速度(主要关注点)或者通过使对相机帧缓冲区的低级访问变得复杂来严重增加开发时间.

所以我的问题是,除了显而易见的,有什么优势,但特别是对于处理器密集型视频处理应用程序的Marmalade SDK的限制.

M K*_*atz 99

我已经在我的独立游戏公司里使用了Marmalade/Airplay近两年了.对我而言,这是一场胜利,因为我只是一名程序员,我几乎可以使用MS Dev Studio(这是我最喜欢的开发环境)在Windows中完成我的所有工作,因为它使我无需处理大量的特定于平台的细节,尤其是各种开发工具,可能会占用我花在游戏内容上的大部分时间.

速度不会是橘子酱的问题.您的C++代码本机运行.此外,访问相机和其他功能应该不是一个问题; 它已经提供或者可以使用扩展SDK添加,这非常简单易用.

Marmalade是一款成熟的产品,该公司非常有助于快速解决问题,即使对于免费使用该产品的独立开发者也是如此.除了跨平台之外,它还内置了一些不错的工具,例如内存泄漏跟踪器,日志记录系统,图形分析工具等.

我在Marmalade中遇到过一些缺点.

  1. 即使理论上任何API或第三方SDK都可以通过扩展系统访问,但实际上您需要的东西可能还不存在.例如,许多开发人员目前正在努力将Flurry集成的分析软件包,这对某些人来说是一个挑战.这种情况与许多其他第三方SDK类似; 如果你正在进行Objective-C开发,它们可能只是几行集成,但通过Marmalade可能会更难.

  2. 由于您操作的跨平台层,有些东西不太自然.我的一些例子是:

    • 我无法在iOS和Android上的所有屏幕尺寸中正确显示启动画面(应用程序启动屏幕).并且很难让它们在没有闪烁,短暂停电时间的情况下显示,或者在Marmalade应用程序本身的设备负载之间转换时调整图像大小,然后是Marmalade加载应用程序代码的步骤.

    • Marmalade强加了一个非常简单的内存模型,你可以在前面得到一个固定的堆,并且所有内存分配都是通过Marmalade完成的.从系统的角度来看,应用只需拥有并保留一大块(或几个大块)内存.这有一些优点,但是我在使用iOS模型时遇到了这个模型的问题,例如,接收内存警告并且预计会抛弃任何不必要的资源.似乎是"一刀切"最终实际上失去了一些关键功能的情况.

    • 您可以使用扩展管理器和其他一些方法来显示本机UI元素,但是集成大量本机外观UI可能是一个挑战.因此,如果你的应用程序类似游戏,用户可以处理非标准按钮等等,那很好,但是如果你预计需要大量的原生用户界面,那就更难了.[编辑:最新版本的Marmalade添加了一个原生UI框架,允许您以通用方式指定标准UI元素,然后使用适当的小部件为设备实现.我没有用过它,但它看起来相当全面.]

  3. 如果遇到问题,通常不清楚它是一般操作系统问题还是橘子酱问题,而且试图找到帮助可能会很孤单.例如,我最近在iOS和Android上为我的游戏添加了应用内购买.IAP具有挑战性,即使没有额外的SDK层,也有很多特殊情况需要处理.在我的情况下,我的情况是我的应用程序被苹果公司拒绝了一个小问题,当它处于被拒绝状态时,我的应用程序内购买也处于"被拒绝"状态(即使没有任何破坏) IAP本身;这只是苹果公司流程的一个怪癖.当我试图回归测试应用内购买功能时(当我提交此非应用内购买相关问题的修复程序时)​​,游戏实际上崩溃了,而不是获得适当的错误结果.我能够确定崩溃不在我的游戏代码中,所以它是操作系统(不太可能)或Marmalade中间层用于处理应用程序内购买回调(事实证明它是[更新11]/28/2012:据报道,Marmalade在最近的SDK更新中解决了这个问题.

    所以在这样的情况下你可以尝试使用Stack Overflow获得帮助,但实际上没有人可以帮助你,所以你依赖于Marmalade团队回答你的问题.正如我所说,他们做得很好,但是它无法与全球普通iOS程序员社区的Stack Overflow上的即时响应竞争.所以我说最后一个是我最关心的是使用像橘子酱这样的系统.它可以节省您的时间,而不必快速了解各种平台SDK的细节,但是当您遇到问题时,您会对Marmalade团队(或友好的Marmalade社区成员)"怜悯"回到你得到了答案.(请记住,我' 我作为一个免费的独立开发者写作,只是获得问题解决的标准优先权.你可以付钱以保证快速解决.)就我个人而言,很难不断回到我的制作人那里说"我正在等待Marmalade家伙对这个问题的回答."

    (问题3的另一个例子是,直到最近才出现某些Android设备上的声音效果被延迟的问题.这是一个Marmalade问题,他们最终解决了它,但它花了一段时间,基本上没什么可以做的同时.)

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

尽管上面列出了很多潜在问题,但我还是Marmalade的粉丝,我很欣赏公司为我提供的所有免费服务.当涉及到其他平台时,这个工具真的很棒,你不会打扰,比如(对我来说)bada或PlayBook.您可以从PC和Developer Studio(或者使用xcode的Mac,如果您想让生活变得更加艰难)中部署到各种各样的设备.他们拥有的模拟器工具很棒,并且只有少数实例我必须在设备上进行调试; 一般来说,如果它在模拟器上工作,它只是工作.IdeaWorks面临着巨大的挑战,他们在所有这些平台上(即,基本上是移动设备上提供的所有功能)都在做很好的工作(即,存在的所有重要设备,Windows Phone 7除外,因为它目前不允许本机代码).它只是附带一些警告.

  • 很好的答案,感谢您抽出宝贵的时间来提供适当的客观体验. (3认同)
  • 谢谢你的详细解答.只是想知道自从您上次更新答案以来是否有任何问题得到改善/解决? (2认同)

小智 9

我很有偏见,是Marmalade的首席技术官......但如果您的关键要求是(1)摄像头访问和(2)"挤出每一点可用的处理能力"的能力,那么Marmalade是一个很好的选择.

Marmalade将您的C/C++编译为本机ARM(或x86)指令......没有转码,没有虚拟机.它很容易引入现有的C/C++代码,几乎支持所有C/C++标准库等.您可以在项目中使用ASM代码.此外,您可以在Windows或Mac上进行所有开发,无论您部署到哪个平台(是的,您甚至可以纯粹在Windws上编译/测试/部署到iOS).