原生 Android/iOS 开发与 Marmalade SDK [关闭]

2023-12-20

我们公司正处于原生 Android/iPhone 开发和一些跨平台解决方案之间进行选择的边缘,特别是 Marmalade SDK(以前的 Airplay SDK)。

我们是一家计算机视觉公司,这意味着我们需要对相机设备进行低级别访问。此外,我们的应用程序的计算成本很高,这意味着我们往往会榨干每一点可用的处理能力。

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

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

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


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

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

    (问题3的另一个例子是,直到最近在某些Android设备上还出现了音效延迟的问题。这是一个Marmalade问题,他们最终确实解决了这个问题,但是花了一段时间,基本上你无能为力同时。)

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

尽管上面列出了一长串潜在问题,但我是 Marmalade 的粉丝,并且我感谢公司免费为我提供的一切。当涉及到其他你永远不会打扰的平台时,例如(对我来说)bada 或 PlayBook,该工具确实非常出色。您确实可以从舒适的 PC 和 Developer Studio 部署到各种设备(或者从带有 xcode 的 Mac,如果您想让您的生活变得更困难一点;)。他们拥有的模拟器工具非常棒,只有少数情况下我必须在设备本身上进行调试;一般来说,如果它在模拟器上运行它就可以运行。 IdeaWorks 面临着巨大的挑战,他们在所有这些平台(即现有的所有重要设备,Windows Phone 除外)上出色地兼顾了所有这些功能(即基本上移动设备上提供的所有功能) 7 因为它目前不允许本机代码)。它只是有一些警告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原生 Android/iOS 开发与 Marmalade SDK [关闭] 的相关文章

随机推荐

  • 使用 JBoss 将消息发布到远程 JMS 队列

    这看起来很简单 但我找不到简单的答案 我想打开到远程 JMS 代理的连接 IP 和端口已知 打开到特定队列 名称已知 的会话并向该队列发布消息 是否有任何简单的 Java API 如果可能的话 标准 可以做到这一点 EDIT 好吧 我现在明
  • 环境变量文件的命名约定?

    我只是想知道是否有任何标准化约定 env环境变量文件 如果我有多个设置 例如development staging production 它们的标题应该是什么 我见过 env development development env sett
  • 快速第 n 个孩子问题

    我有一个快 nth child我正在努力解决的问题 我的目标是形成一个列表的 4 个项目分组中的每第 3 个和第 4 个项目 例如 div class normal Item 1 div div class normal Item 2 di
  • 并行执行 DocumentDb 存储过程

    documentDb 存储过程可以并行运行并更新同一对象吗 documentDb 会按顺序处理它们吗 考虑以下场景 我有一个应用程序 当我的用户完成任务时 我可以赠送 10000 个硬币 我有以下对象 remainingPoints 100
  • swift 3 结合使用语音识别和 AVFoundation

    我成功地能够使用 Speech 语音识别 并且可以使用 AVFoundation 在 Xcode 8 IOS 10 中播放 wav 文件 我只是不能同时使用它们 我有工作语音识别代码 可以在其中导入语音 当我将 AVFoundation 导
  • XmlSerializer System.InvalidOperationException

    我的应用程序中有以下代码 Serializable public class Class private string name private List
  • 使用python从youtube抓取视频信息

    我想使用 python 提取某个 Youtube 视频的视频信息 如标题 观看者数量 就像我在其他网站上进行网页抓取一样 但由于某种原因 它要么不返回任何内容 要么只为侧面推荐的视频而不是 URL 的 主视频 提供标签 我尝试了与在其他网站
  • Git fork 版本礼仪 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当我在 GitHub 上分叉别人的项目 更新文件并更新我自己的分叉时 如何对我的分叉进行版本控制 例如 原始项目是版本1 2 3 我添加了一个小
  • 如何使用 pytest 来断言不引发警告

    我想确保完全没有警告在一项断言中提出 找不到任何明确的答案关于警告的 pytest 文档 https docs pytest org en 3 2 1 warnings html assertwarnings 死链接 3 2 文档不再可用
  • Xlib:以最小化或最大化状态创建窗口

    是否可以使用 Xlib 创建最大化或最小化状态的窗口 如果是这样 我将如何去做呢 像这样的东西 XEvent xev Atom wm state XInternAtom dpy NET WM STATE False Atom max hor
  • 存储库设计模式 - 每个 Dao 都应该有一个存储库吗?

    我的应用程序中有一些 DAO 它们访问数据库以进行 CRUD 操作 比如说新闻 天气和体育 DAO 所以我对需要多少个存储库感到困惑 我应该只使用一个存储库 例如 DataRepository 并让我保存我的数据库和所有 dao 并在其中封
  • 如何从一侧禁用抽屉布局?

    我做了一个双抽屉布局没有操作栏像这样的东西 使用没有 TitleBar 或 ActionBar 的导航抽屉 https stackoverflow com questions 17735621 using navigation drawer
  • 在linux内核模块中运行无限循环

    我制作了一个模块 我想在其中运行无限循环 直到不卸载该模块为止 目前 如果我执行 rmmod 它会通知我模块仍然繁忙 并且在一段时间后内核出现恐慌 while 1 有什么技巧可以让我运行无限循环直到卸载模块 这个循环在什么上下文中运行 这是
  • 使用 pyenv 运行 mod_wsgi

    我正在尝试在 Apache 服务器上运行 python Web 应用程序 我已经安装了 mod wsgi sudo apt get install libapache2 mod wsgi 这是我的站点配置文件
  • 尝试登录 Keycloak Admin WS

    我需要通过可通过路径访问的 Admin WS 在 Keycloak 中配置领域 http KeycloakServer 8081 auth admin realms 所以在邮递员中我运行以下请求 URL http KeycloakServe
  • 错误:使用 html-pdf NPM 时在 Cloud Run 上写入 EPIPE

    在这里我试图将 HTML 转换为 PDF 并使用 html pdf npm https www npmjs com package html pdf https www npmjs com package html pdf 该代码在本地运行
  • 何时使用详细类型说明符

    选择使用详细类型说明符是否有特别充分的理由 例如 在某些情况下 需要使用template or typename用于消除依赖关系歧义的关键字template或键入 但我想不出任何例子会发生这种情况 例如枚举 采取以下代码示例 enum Fo
  • 资源管理器资源集具有错误的值

    我正在开发一个使用本地化 resx 资源文件的 wpf prism 4 应用程序 经过一些调试 它没有按预期工作 我发现资源管理器的所有资源集都具有相同的值 默认 loc resx 的值 我的问题是 那里出了什么问题 先感谢您 好吧 我终于
  • 如何管理 Flash CS4 中具有链接类的库符号以在 Flash Builder 4 中进行编译/调试?

    我正在使用 Flash CS4 以下简称 Flash 构建一个视频播放器来创建图形符号 并使用 Flash Builder 4 FB4 进行编译和调试 以下是我在当前工作流程中采取的步骤 在Flash中创建图形符号 我为播放器创建了一些不同
  • 原生 Android/iOS 开发与 Marmalade SDK [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们公司正处于原生 Android iPhone 开发和一些跨平台解决方案之间进行选择的边缘 特别是 Marmalade SDK 以前