【问题标题】:Native Android/iOS development vs Marmalade SDK [closed]原生 Android/iOS 开发与 Marmalade SDK [关闭]
【发布时间】:2011-09-26 12:35:09
【问题描述】:

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

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

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

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

所以我的问题是,除了显而易见的,Marmalade SDK 对于处理器密集型视频处理应用程序有哪些优势,但具体有哪些限制。

【问题讨论】:

  • 我不确定果酱,但如果他们不让您直接访问本机 API(如工作灯)并且它不会将您的代码转换为本机 API,那么计算软件应该选择native API,大部分共享代码确实可以是c++,现在andriod代码甚至可以有native Activity,所以只有你的包装应用程序应该是java,所以我会选择native code。

标签: android ios cross-platform airplay marmalade


【解决方案1】:

我在独立游戏公司使用 Marmalade/Airplay 已经快两年了。对我来说,这是一个胜利,因为我只是一名程序员,而且我几乎可以使用 MS Dev Studio(这是我迄今为止最喜欢的开发环境)在 Windows 中完成我的所有工作,并且因为它使我不必处理很多特定于平台的细节,尤其是各种开发工具,可能会占用我宁愿花在游戏内容上的大量时间。

速度不会成为果酱的问题。您的 C++ 代码本机运行。此外,访问相机和其他功能应该不是什么大问题。它要么已经提供,要么可以使用扩展 SDK 添加,使用起来非常简单。

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

我体验过果酱的一些缺点。

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

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

    • 我无法在 iOS 和 Android 上以所有屏幕尺寸正确显示初始屏幕(应用程序启动屏幕)。在 Marmalade 应用程序本身的设备加载和 Marmalade 加载应用程序代码的步骤之间转换时,很难让它们显示而没有一些闪烁、短暂的黑屏或调整图像大小。

    • Marmalade 采用了一个非常简单的内存模型,您可以在其中预先获得一个固定的堆,并且所有内存分配都通过 Marmalade 完成。从系统的角度来看,应用程序只是拥有并保留了一大块(或几个大块)内存。这有一些优点,但是我在将此模型与 iOS 模型平方时遇到了问题,例如,接收内存警告并被期望丢弃任何不必要的资源。似乎是“一刀切”最终实际上失去了一些关键功能的情况。

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

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

    因此,在这种情况下,您可以尝试在 Stack Overflow 上寻求帮助,但实际上没有人可以帮助您,因此您需要依靠 Marmalade 团队来回复您。正如我所说,他们在这方面做得很好,但它无法与来自全球普通 iOS 程序员社区的 Stack Overflow 上几乎即时的响应相媲美。所以我想说最后一个是我对使用像果酱这样的系统最关心的问题。它为您节省了前期时间,而不必快速了解各种平台 SDK 的细节,但是当您遇到问题时,您可以“任由”Marmalade 团队(或友好的 Marmalade 社区成员)返回你有一个答案。 (请记住,我是作为一个免费的独立开发者写作的,他只是获得问题解决的标准优先级。你可以付费以获得保证快速解决。)就我个人而言,一直回到我的制作人那里是很困难的,并且说“我正在等待果酱家伙对此的回答。”

    (问题 3 的另一个例子是直到最近在某些 Android 设备上还存在音效延迟的问题。这是一个 Marmalade 问题,他们最终解决了它,但花了一段时间,基本上没有您可以在此期间进行。)

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

尽管上面列出了一长串潜在问题,但我还是 Marmalade 的粉丝,我感谢公司为我免费提供的一切。当涉及到其他您永远不会打扰的平台时,该工具真的很出色,例如(对我而言)bada 或 PlayBook。您真的可以从舒适的 PC 和 Developer Studio (或者从带有 xcode 的 Mac,如果您想让自己的生活变得更艰难;)部署到各种设备。他们拥有的模拟器工具很棒,只有少数情况下我必须在设备本身上进行调试;一般来说,如果它在模拟器上工作,它就可以工作。 IdeaWorks 已经接受了巨大的挑战,他们在所有这些平台(即所有现有的重要设备,除了 Windows Phone 7,因为它目前不允许使用本机代码)。它只是带有一些警告。

【讨论】:

  • 非常感谢您的详尽回答。我绝对钦佩果酱目前可以做到的。多亏了你,我现在也知道在我的公司内使用它有什么影响。
  • 很好的答案,感谢您抽出宝贵的时间提供适当的客观体验。
  • 如果您使用 Marmalade 的 Camera Capture API(使用操作系统默认的照片应用程序),您会没事的。对于更高级的用法,您可以使用 Camera API,但间接层可能会限制您在本机访问相机方面可以做的事情;尤其是(在我的情况下)预览的刷新率很慢:在我的 Galaxy Nexus 中,NUI 照片预览明显慢于原生相机应用程序。我的策略是使用 Marmalade EDK 使用 android java api 创建预览表面,并通过回调将图像发送回本机代码。对我来说工作正常,但这是额外的工作......
  • 感谢您的详细回答。只是想知道自您上次更新答案以来您的任何问题是否有所改善/解决?
  • @MKatz 感谢您提供如此详细的答案;我真的很感谢您的时间...只是想知道您的任何问题是否已经改善/解决,因为距离您的答案上次更新已经一年多了.. .
【解决方案2】:

作为 Marmalade 的首席技术官,我有偏见……但如果您的关键要求是 (1) 相机访问权限和 (2) 能够“挤出每一点可用的处理能力”,那么 Marmalade 是一个不错的选择.

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

【讨论】:

  • 向 Tim Closs 提了一个问题:您说:“(是的,您甚至可以纯粹在 Windws 上编译/测试/部署到 iOS)”。我可以在 Windows 机器上将我的应用程序部署到 Apple 吗?我不需要 Mac 将应用程序发送到 App Store 吗?谢谢
  • 我不能正式回答 Marmalade,但是我在整个过程中使用我的 Mac 的一件事是使用 AppLoader 实际提交应用程序。 (AFAIK 没有适用于 Windows 的 AppLoader,但有一个很好的适用于 Windows 的 iPhone 配置实用程序。)
  • 蒂姆,我们热爱果酱,相信它的未来。它具有良好的性能和围绕它的深度工程工具(我们实际上已经将 OpenCV 贡献给了它的 git)。但是我们现在担心使用相机时应用程序会出现间歇性崩溃,其他人也报告了同样的情况。你们可以努力解决这个问题吗?这对我们至关重要,我相信每个人。一些线程重新发布:tinyurl.com/7mcd5y5tinyurl.com/7apzx4ytinyurl.com/czklmr9
  • 如何在不违反 Apple Developer SDK 许可/协议的情况下在 windows 上编译/测试/部署?我了解 Apple 明确禁止在非 Apple 操作系统上分发其 SDK 的衍生作品。出于这个原因,Xamarin 使用 Mac 机器上的远程后端进行编译。 Marmalade 如何遵守 Apple 许可?如果一切都是二进制且未解释,则必须有一组从安装在 Windows 上的 ios SDK 派生的头文件和库。
【解决方案3】:

据我所知,ANDROID Development: Android 本身的相机 API 似乎有点问题(例如:在 2.1 之前,没有解决方案可以在不打乱图像的情况下以纵向模式显示相机)。 在此之上的另一个抽象层可能会更好(在可访问性、功能等方面),甚至更糟。它对 shure 的作用:它会窃取您自己的应用程序可能需要的资源。

【讨论】:

    【解决方案4】:

    Marmalade 提供了出色的原生扩展框架

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

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

    在 android 上也是如此,因为 marmalade 使用 android NDK,您用于处理数据的 c++ 代码将比相应的 android Java 代码运行得更快。

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

    【讨论】:

      【解决方案5】:

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

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

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

      /托尼

      【讨论】:

      • 我们确实时不时地求助于一些内联汇编
      【解决方案6】:

      果酱还不错,我在 2013 年用过。一些错误,一些烦恼(固定内存池),但总体来说还不错。

      唯一真正令人失望的是缺乏对 Linux 的支持。 我不明白 Marmalade 公司如何支持黑莓等晦涩的平台,但不支持 Linux。这没有道理。也许随着 Steam OS(一个基于 Linux、以游戏为中心的平台)的成熟,这种情况会发生变化,尽管目前除了其他操作系统带来的东西之外,Steam 操作系统并没有带来很多东西。

      【讨论】:

      • 感谢您回答并为 Stack Overflow 做出贡献,但是请再看一下这个问题,因为根据help center,它似乎离题了。回答离题的问题看起来像是可以问这样的问题 - 事实并非如此。离题的问题可能会被关闭然后删除,这将使您的贡献无效!
      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 2014-07-09
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多