web-dev-qa-db-de.com

Native Android/iOS-Entwicklung vs. Marmalade-SDK

Unser Unternehmen steht kurz davor, zwischen einer nativen Android-/iPhone-Entwicklung und einer plattformübergreifenden Lösung, insbesondere Marmalade SDK (ehemals Airplay SDK), zu wählen.

Wir sind ein Computer-Vision-Unternehmen, das heißt, wir benötigen einen einfachen Zugriff auf die Kamerageräte. Außerdem sind unsere Anwendungen rechenintensiv, was bedeutet, dass wir jedes bisschen Rechenleistung ausnutzen.

Unser Team verfügt über ausreichende Erfahrung sowohl in Objective-C als auch in Java (oder C), um plattformspezifische Lösungen bereitzustellen. Unser Hauptaugenmerk lag jedoch immer auf C++. Daher möchten wir das Auseinanderbrechen des Teams verhindern und lieber mit einer plattformübergreifenden Lösung arbeiten.

Unsere größte Befürchtung besteht darin, dass die Wahl von Marmalade entweder die Verarbeitungsgeschwindigkeit (Hauptanliegen) einbüßt oder die Entwicklungszeit erheblich verkürzt, indem der Zugriff auf den Bildpuffer der Kamera erschwert wird.

Meine Frage ist, neben den offensichtlichen, die Vorteile, aber insbesondere die Einschränkungen von Marmalade SDK für prozessorintensive Videoverarbeitungsanwendungen.

38
Abai

Ich habe Marmalade/Airplay seit fast zwei Jahren in meiner Indie-Spielefirma eingesetzt. Für mich ist es ein Gewinn, weil ich nur ein Programmierer bin und ich praktisch meine gesamte Arbeit in Windows mit MS Dev Studio erledigen kann (was bei weitem meine Lieblingsumgebung ist) und weil es mich davon abhält, mich mit viel zu beschäftigen Die plattformspezifischen Details, insbesondere bei den verschiedenen Entwicklungstools, könnten die Zeit, die ich lieber mit Spielinhalten verbringen möchte, sehr zeitaufwendig machen.

Geschwindigkeit wird bei Marmelade kein Problem sein. Ihr C++ - Code wird nativ ausgeführt. Auch der Zugriff auf Kamera und andere Funktionen sollte kein großes Problem sein. Es ist entweder bereits vorhanden oder kann mit dem Erweiterungs-SDK hinzugefügt werden, was ziemlich einfach zu bedienen ist.

Marmalade ist ein ausgereiftes Produkt und das Unternehmen ist sehr hilfreich, um Probleme schnell zu lösen, selbst für Entwickler, die das Produkt kostenlos verwenden. Neben der plattformübergreifenden Funktionalität sind einige Nice-Tools integriert, z. B. ein Speicherleck-Tracker, ein Protokolliersystem, Grafikanalyse-Tools und andere.

Es gibt einige Nachteile, die ich mit Marmalade erlebt habe.

  1. Auch wenn theoretisch alle APIs oder SDKs von Drittanbietern über das Erweiterungssystem verfügbar sind, ist das, was Sie brauchen, in der Praxis möglicherweise noch nicht vorhanden. Zum Beispiel kämpfen einige Entwickler derzeit mit der Integration des Analysepakets Flurry, was für einige eine Herausforderung war. Bei vielen anderen SDKs von Drittanbietern ist die Situation ähnlich. Sie können nur ein paar Zeilen zur Integration sein, wenn Sie die Objective-C-Entwicklung durchführen, aber über Marmalade schwieriger sein.

  2. Einige Dinge sind aufgrund der plattformübergreifenden Ebene, durch die Sie arbeiten, weniger natürlich. Einige Beispiele für mich waren:

    • Ich habe Probleme damit, dass meine Begrüßungsbildschirme (Anwendungsstartbildschirme) in allen Bildschirmgrößen sowohl auf iOS als auch auf Android richtig angezeigt werden. Es war schwer, sie zu zeigen, ohne flackernde, kurze Blackout-Zeiten oder die Änderung der Größe von Bildern, wenn zwischen dem Geräteladen der Marmalade-App selbst und dem Schritt des Laden des App-Codes durch Marmalade übergeht.

    • Marmalade erzwingt ein sehr einfaches Speichermodell, bei dem Sie im Voraus einen festen Haufen erhalten und die gesamte Speicherzuweisung über Marmalade erfolgt. Aus der Sicht des Systems verfügt die App lediglich über einen großen Speicherblock (oder einige große Speicherblöcke). Dies hat einige Vorteile, aber ich hatte Probleme, dieses Modell mit dem iOS-Modell zu quadrieren, z. B. beim Erhalten von Speicherwarnungen, und es wird erwartet, dass unnötige Ressourcen abgeworfen werden. Es scheint ein Fall zu sein, in dem "one size fits all" letztendlich einige wichtige Funktionen verliert.Sie können den Erweiterungsmanager und einige andere Methoden verwenden, um native UI-Elemente anzuzeigen. Die Integration einer erheblichen Menge an UI mit nativem Look & Feel kann jedoch eine Herausforderung sein. Wenn Ihre App also spielähnlich ist und Benutzer mit nicht standardmäßigen Schaltflächen usw. umgehen können, ist das in Ordnung, aber wenn Sie davon ausgehen, dass Sie eine native native Benutzeroberfläche benötigen, ist dies schwieriger. [Bearbeiten: Neueste Versionen von Marmalade haben ein natives UI-Framework hinzugefügt, mit dem Sie Standard-UI-Elemente auf generische Weise angeben und dann die entsprechenden Widgets für das Gerät implementieren können. Ich habe das nicht benutzt, aber es sieht ziemlich umfassend aus.].

    • Wenn Sie auf Probleme stoßen, ist oft nicht klar, ob es sich um ein generisches Betriebssystemproblem oder ein Marmeladenproblem handelt, und es kann einsam sein, wenn Sie Hilfe suchen. Zum Beispiel habe ich kürzlich mein In-App-Kauf für iOS und Android hinzugefügt. IAP ist eine Herausforderung, und auch ohne eine zusätzliche SDK-Schicht gibt es viele Sonderfälle, mit denen man sich befassen muss. In meinem Fall hatte ich eine Situation, in der meine App von Apple für ein kleines Problem abgelehnt wurde. Während des Ablehnungsstatus befand sich mein In-App-Kauf auch in einem "Abgelehnt" -Zustand (obwohl nichts kaputt war das IAP selbst; dies ist nur eine Eigenart von Apples Prozess). Beim Versuch, die In-App-Kauffunktion zu testen (während ich den Fix für dieses Problem mit Nicht-In-App-Kauf übermittelte), stürzte das Spiel tatsächlich ab, anstatt ein entsprechendes Fehlerergebnis zu erhalten. Ich konnte feststellen, dass der Absturz nicht in meinem Spielcode enthalten war. Es war also entweder das Betriebssystem (unwahrscheinlich) oder die mittlere Schicht der Marmalade für die Handhabung der In-App-Kaufrückrufe (wie es sich herausgestellt hat [Update 11.]/28/2012: Marmalade hat dieses Problem Berichten zufolge in einem kürzlich durchgeführten SDK-Update behoben]).

  3. (Ein anderes Beispiel für Problem 3 ist, dass bis vor kurzem ein Problem mit verzögerten Soundeffekten auf bestimmten Android-Geräten aufgetreten ist. Es war ein Marmalade-Problem, das schließlich behoben wurde, aber es dauerte eine Weile, und im Grunde können Sie nichts tun inzwischen.) 

    Beachten Sie, dass Sie (wie andere Benutzer darauf hingewiesen haben) auch ohne Marmalade immer noch den Großteil Ihrer Codebasis in C++ auf iOS oder Android haben können.

    Trotz der langen Liste möglicher Probleme bin ich ein Fan von Marmalade, und ich schätze alles, was das Unternehmen für mich kostenlos zur Verfügung gestellt hat. Das Tool ist wirklich gut, wenn es um andere Plattformen geht, mit denen Sie sonst nie etwas anfangen würden, wie (für mich) Bada oder PlayBook. Sie können die Bereitstellung auf einem breiten Spektrum von Geräten von Ihrem PC und Developer Studio aus (oder von einem Mac mit Xcode aus, wenn Sie Ihr Leben etwas schwieriger gestalten möchten). Das Simulator-Tool, das sie haben, ist großartig, und es gab nur wenige Fälle, in denen ich das Gerät selbst debuggen musste. Wenn es auf dem Simulator funktioniert, funktioniert es im Allgemeinen einfach. IdeaWorks hat eine enorme Herausforderung angenommen, und es ist ein großartiger Job, alle diese Funktionen (dh grundsätzlich alle Funktionen, die jemals auf einem mobilen Gerät angeboten wurden) auf all diesen Plattformen (dh allen wichtigen Geräten, mit Ausnahme von Windows Phone) zu jonglieren 7, da derzeit kein systemeigener Code zulässig ist. Es gibt nur einige Vorbehalte.

Keep in mind that (as other responders have pointed out) even without Marmalade you can still have the bulk of your code base in C++ on either iOS or Android.

In spite of the long list of potential issues above, I am a fan of Marmalade, and I appreciate all the company has provided for me for free. The tool really shines when it comes to other platforms that you'd otherwise never bother with, such as (for me) bada or PlayBook. You really can deploy to a wide array of devices from the comfort of your PC and Developer Studio (or from a Mac with xcode, if you want to make your life a little harder ;). The simulator tool they have is great, and there have been only a small number of instances where I've had to debug on the device itself; in general if it works on the simulator it just works. IdeaWorks has taken on a huge challenge and they are doing a great job juggling all these features (i.e., basically every features ever offered on a mobile device) on all these platforms (i.e., all significant devices in existence, with the exception of Windows Phone 7 because it does not currently allow native code). It just comes with some caveats.

100
M Katz

Ich bin voreingenommen, als CTO bei Marmalade ... aber wenn Ihre wichtigsten Anforderungen (1) der Zugriff auf die Kamera und (2) die Möglichkeit sind, "jedes bisschen Rechenleistung zur Verfügung zu stellen", ist Marmalade eine gute Wahl.

Marmalade kompiliert Ihr C/C++ zu nativen ARM (oder x86) Anweisungen ... keine Transcodierung, keine virtuellen Maschinen. Es ist sehr einfach, vorhandenen C/C++ - Code zu verwenden. Nahezu alle C/C++ - Standardbibliotheken werden unterstützt. Außerdem können Sie ASM-Code in Ihrem Projekt verwenden. Außerdem können Sie Ihre gesamte Entwicklung entweder auf Windows oder auf dem Mac durchführen, unabhängig davon, auf welchen Plattformen Sie bereitgestellt werden (ja, Sie können sogar auf Windws kompilieren, testen und auf iOS bereitstellen).

10
Tim Closs

Soweit ich Sie von Android Development sagen kann: Die Camera API von Android selbst scheint ein wenig fehlerhaft zu sein (im Beispiel: vor 2.1 gibt es keine Lösung, um die Kamera im Hochformat anzuzeigen, ohne die Bilder zu verschlüsseln). Eine weitere Abstraktionsebene darüber könnte besser sein (in Bezug auf Zugänglichkeit, Features, was auch immer) oder noch schlimmer. Was es für sicheres tut: Es stiehlt Ressourcen, die für Ihre eigene App benötigt werden.

2
Rafael T

Marmalade bietet ein hervorragendes Framework für native Erweiterungen

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

Was letztendlich bedeutet, dass Sie direkt zu einer nativen Implementierung eines bestimmten Features springen können. Sie behalten die wichtigsten Vorteile der Cross-Plattform-Entwicklung für Ihre Haupt-App. 

Auch bei Android, da marmalade das Android NDK verwendet, wird Ihr C++ - Code für die Datenverarbeitung schneller als der entsprechende Android-Java-Code ausgeführt.

Ich mache Spiele mit Marmalade und den Erweiterungen und der Geschwindigkeit des nativen Codes machen mich sehr zuversichtlich, zumindest sowie eine "native" App anbieten zu können.

2
pSK

Ich würde MoSync Android/iOS verwenden, aber das würde ich sagen, da ich bei MoSync arbeite.

Aber ich bevorzuge die MoSync Camera API.

Wenn Sie die gesamte Verarbeitungsleistung wirklich herausnehmen möchten, sollten Sie ASM verwenden.

/ Tony 

1
SpagnumMoss

Marmelade ist nicht schlecht, ich habe sie 2013 verwendet. Einige Fehler, einige Störungen (feste Speicherpools), aber insgesamt keine schlechte Erfahrung.

Die einzige echte Enttäuschung ist die fehlende Unterstützung für Linux. Ich kann nicht erkennen, wie die Marmalade-Jungs obskure Plattformen wie Blackberry unterstützen können, Linux jedoch nicht. das macht keinen Sinn. Möglicherweise wird sich dies mit der Reifung von Steam OS (einer Linux-basierten, auf Spiele ausgerichteten Plattform) ändern, obwohl zugegebenermaßen Steam OS nicht viel außerhalb der anderen Betriebssysteme bringt.

0
Engineer