Родная разработка Android/iOS против Marmalade SDK [закрыто]

наша компания находится на грани выбора между родной разработкой Android / iPhone и некоторым кросс-платформенным решением, в частности Marmalade SDK (бывший AirPlay SDK).

мы являемся компанией компьютерного зрения, то есть нам нужен низкий уровень доступа к устройствам камеры. Кроме того, наши приложения вычислительно дороги, то есть мы склонны выжимать каждый бит доступной вычислительной мощности.

наша команда имеет достаточный опыт как в Objective-C, так и в Java (или C) для предоставления решений, специфичных для платформы. Однако наше основное внимание всегда было сосредоточено на C++, поэтому мы хотели бы предотвратить фрагментацию команды и работать с кросс-платформенным решением.

наш самый большой страх заключается в том, что выбор мармелада либо пожертвует скоростью обработки (основная проблема), либо серьезно увеличит время разработки, усложнив низкоуровневый доступ к буферу кадра камеры.

Итак, мой вопрос, помимо очевидного, каковы преимущества, но в частности, ограничения Marmalade SDK для приложений интенсивной обработки видео процессора.

6 ответов


Я использовал мармелад/Airplay в течение почти двух лет в моей инди-игровой компании. Для меня это победа, потому что я всего лишь один программист, и я могу делать практически всю свою работу в Windows, используя MS Dev Studio (которая является моей любимой средой разработки), и потому что она защищает меня от необходимости иметь дело со многими деталями платформы, особенно с различными инструментами разработки, которые могут съесть много времени, которое я бы предпочел потратить на игровой контент.

скорость не будет проблема с мармеладом. Код на C++ работает. Кроме того, доступ к камере и другим функциям не должен быть большой проблемой; он либо уже предоставлен, либо может быть добавлен с помощью SDK расширений, который довольно прост в использовании.

мармелад-зрелый продукт, и компания довольно полезна в решении проблем быстро, даже для инди-разработчиков, которые используют продукт бесплатно. В дополнение к кросс-платформенной ness, он имеет некоторые хорошие инструменты, встроенные, такие как трекер утечки памяти, система регистрации, инструменты графического анализа и другие.

есть некоторые недостатки, которые я испытал с мармеладом.

  1. хотя теоретически любой API или сторонний SDK доступен через систему расширений, на практике то, что вам нужно, может еще не существовать. Например, ряд разработчиков в настоящее время изо всех сил пытаются интегрировать пакет аналитики Flurry, и это было проблемой для некоторых. Положение аналогично с множеством других сторонних SDK; они могут быть всего лишь парой строк для интеграции, если вы занимаетесь разработкой Objective-C, но могут быть сложнее с помощью мармелада.

  2. некоторые вещи менее естественны из-за кросс-платформенного слоя, через который вы работаете. Некоторые примеры для меня были:

    • У меня были проблемы с тем, чтобы мои заставки (экраны запуска приложений) отображались правильно во всех размерах экрана на iOS и Андроид. И было трудно заставить их показывать без некоторых мерцающих, коротких периодов затемнения или изменения размера изображений при переходе между загрузкой устройства самого приложения Marmalade, а затем шагом Marmalade загрузки кода приложения.

    • мармелад накладывает очень простую модель памяти, где вы получаете фиксированную кучу спереди, и все выделение памяти выполняется через мармелад. С точки зрения системы приложение просто имеет и сохраняет большой блок (или несколько больших блок памяти. Это имеет некоторые преимущества, но у меня были проблемы с квадратурой этой модели с моделью iOS, например, получение предупреждений памяти и ожидание сброса любых ненужных ресурсов. Похоже, что это случай, когда "один размер подходит всем" фактически теряет некоторые ключевые функции.

    • вы можете использовать менеджер расширений и некоторые другие методы для отображения собственных элементов пользовательского интерфейса, но интеграция значительного количества собственного пользовательского интерфейса может быть вызов. Поэтому, если ваше приложение похоже на игру, и пользователи могут иметь дело с нестандартными кнопками и т. д., Это нормально, но если вы ожидаете значительного собственного пользовательского интерфейса, это сложнее. [edit: последние версии Marmalade добавили собственную структуру пользовательского интерфейса, которая позволяет указать стандартные элементы пользовательского интерфейса в общем виде, а затем реализует затем с помощью соответствующих виджетов для устройства. Я не использовал это, но это выглядит довольно обширный.]

  3. Если вы запустите в проблемы часто не ясно, является ли это общей проблемой ОС или проблемой мармелада, и это может быть одиноко, пытаясь найти помощь. Например, недавно я добавил in-app purchase в свою игру как на iOS, так и на Android. IAP является сложной задачей, и даже без дополнительного уровня SDK есть много особых случаев для решения. В моем случае у меня была ситуация, когда мое приложение было отклонено Apple за небольшую проблему, и пока оно было в отклоненном состоянии, моя покупка в приложении также была " отклонена" состояние (хотя в самом IAP не было ничего сломанного; это просто причуда процесса Apple). Когда я пытался протестировать функцию покупки в приложении (в то время как я отправлял исправление для этой проблемы, не связанной с покупкой в приложении), игра фактически рушилась, вместо того, чтобы получить соответствующий результат ошибки. Я смог определить, что сбой не был в моем игровом коде, поэтому это была либо ОС (маловероятно), либо средний слой мармелада для обработки покупки в приложении обратные вызовы (что оказалось [обновление 28.11.2012: мармелад, как сообщается, исправил эту проблему в недавнем обновлении SDK]).

    таким образом, в такой ситуации вы можете попробовать перейти на переполнение стека, чтобы получить помощь, но на самом деле никто не поможет вам, поэтому вы зависите от команды Marmalade, чтобы вернуться к вам с ответом. Как я уже сказал, они делают это довольно хорошо, но нет никакого способа конкурировать с почти мгновенными ответами на переполнение стека из всемирное сообщество обычных программистов iOS. Поэтому я бы сказал, что это последнее-моя самая большая проблема с использованием такой системы, как мармелад. Это экономит ваше время вперед, не приходя к скорости на деталях различных платформ SDKs, но когда вы сталкиваетесь с проблемами, вы "во власти" команды Marmalade (или дружественных членов сообщества Marmalade), чтобы вернуться к вам с ответом. (Имейте в виду, что я пишу как халявный инди-разработчик, который просто получает стандартный приоритет для выпуска разрешение. Вы можете заплатить, чтобы получить гарантированное быстрое разрешение. Для меня лично было трудно продолжать возвращаться к моему продюсеру и говорить: "я жду ответа от парней с мармеладом на этот вопрос."

    (другой пример проблемы 3 заключается в том, что до недавнего времени была проблема со звуковыми эффектами задерживается на некоторых Android-устройствах. Это был мармеладный вопрос, и они в конечном итоге решили его, но это заняло некоторое время, и в основном вы ничего не можете сделать в между тем.)

имейте в виду, что (как указали другие респонденты) даже без мармелада вы все равно можете иметь основную часть своей базы кода на C++ на iOS или Android.

несмотря на длинный список потенциальных проблем выше, я поклонник мармелада, и я ценю все, что компания предоставила мне бесплатно. Инструмент действительно сияет, когда дело доходит до других платформ, с которыми вы бы никогда не беспокоились, таких как (для меня) bada или PlayBook. Вы действительно можно развернуть на широкий спектр устройств, не выходя из вашего ПК и студии разработчика (или с Mac с xcode, если вы хотите сделать вашу жизнь немного сложнее ;). Инструмент симулятора у них отличный, и было только небольшое количество случаев, когда мне приходилось отлаживать на самом устройстве; в общем, если он работает на симуляторе, он просто работает. IdeaWorks взяла на себя огромную задачу, и они делают большую работу, жонглируя всеми этими функциями (т. е. в основном все функции когда-либо предлагалось на мобильном устройстве) на всех этих платформах (т. е. на всех существующих устройствах, за исключением Windows Phone 7, поскольку в настоящее время он не позволяет собственный код). Он просто приходит с некоторыми оговорками.


я предвзят, будучи CTO в мармеладе... но если ваши ключевые требования: (1) доступ к камере и (2) возможность "выжать каждый бит доступной вычислительной мощности", то мармелад-отличный выбор.

Marmalade компилирует ваши C / C++ в собственные инструкции ARM (или x86)... ни транскодирования, ни виртуальных машин. Очень легко найти существующий код C / C++, поддерживаются почти все стандартные библиотеки C/C++ и т. д. И вы можете использовать код ASM в своем проект. Также, вы можете сделать все ваши разработки на Windows или Mac, независимо от того, какие платформы вы развернуть (да, вы можете даже компиляции/тестирования/внедрения на iOS чисто на Windws).


насколько я могу сказать вам из разработки ANDROID: API камеры от Android сам по себе кажется немного багги (например: до 2.1 нет решения, чтобы получить камеру, показанную в портретном режиме без скремблирования изображений). Другой слой абстракции поверх этого может быть лучше (с точки зрения доступности, функций, чего угодно) или даже хуже. Что он делает для shure: он крадет ресурсы, которые могут потребоваться для вашего собственного приложения.


мармелад предлагает отличную собственную структуру расширения

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

что в конечном счете означает, что вы можете перейти непосредственно к собственной реализации любой конкретной функции. Вы по-прежнему сохраняете основные преимущества кросс-платформенной разработки для своего основного приложения.

также на android, потому что мармелад использует android NDK ваш код C++ для обработки данных будет работать быстрее, чем соответствующий код Java для Андроид.

Im делает игры с мармеладом, а расширения и скорость собственного кода делают меня чрезвычайно уверенным в том, что я могу доставить по крайней мере а также "родных" приложений.


Я бы использовал MoSync Android / iOS, но я бы сказал, что, так как я работаю в MoSync.

но, справедливости ради, я предпочитаю API камеры MoSync.

Если вы действительно хотите выжать всю вычислительную мощность, вы должны использовать ASM.

/Тони


мармелад неплохой, я использовал его в 2013 году. Некоторые ошибки, некоторые раздражения (фиксированные пулы памяти), но в целом не плохой опыт.

единственным настоящим разочарованием является отсутствие поддержки Linux. Я не вижу, как мармеладные ребята могут поддерживать непонятные платформы, такие как Blackberry, но не Linux; это не имеет смысла. Возможно, это изменится, когда Steam OS (платформа на базе Linux, ориентированная на Игры) созреет, хотя, по общему признанию, Steam OS не приносит много к столу помимо того, что приносят другие Осс, пока.