2009-02-25 2 views
8

Ich habe Fragen zu wahren Cross-Plattform-Entwicklung und wenn es möglich ist, eine Plattform zu verwenden, um Software zu entwickeln.Cross-Plattform-Entwicklung

Ich habe ein paar Anwendungen, die ich schreibe, die auf OS X, Windows und Linux arbeiten. Sie alle verwenden systemeigene Plattform-Toolkits mit einigen geteilten Plattformen. Ich muss auf jeder Plattform booten, auschecken, kompilieren, usw.

Ich habe in der Vergangenheit GUI-Toolkits wie QT versucht (Ich kaufte eine kommerzielle Lizenz für Win, Mac, Linus, aber sehr teuer und zahlte es Jahr für Jahr wurde hart). Ich habe versucht WxWidgets, Entwicklung bewegt sich langsam.

Also was ich denke ist, gibt es eine Möglichkeit, eine einzige Plattform zu betreiben und Cross-Compiling für andere Plattformen, so dass ich meine Produkte von einer einzigen Plattform aus erstellen kann.

Ich bevorzuge OS X, gibt es eine Möglichkeit, Apps für OS X, Windows, Linux von OS X zu schreiben, wo ich nur auf jeder Plattform jeweils testen muss. Ich habe Informationen über Quercompiler, Stub Compiling, etc. gefunden.

Hat jemand irgendwelche Gedanken? Ist das überhaupt möglich? Würde jemand eine Tötung machen, die solch eine Bestie verursacht?

+1

Ich schlage Community Wiki auf diesem. –

+0

siehe auch: http://StackOverflow.com/Questions/463431/What-are-Some-Good-Tools-and-Strategies-for-Multi-Platform-development – dreftymac

Antwort

1

Java hat versucht, den Schreibvorgang einmal auszuführen, und zwar überall. Es funktioniert in einigen Situationen gut, aber es gibt zu viele "einzigartige" Dinge in einem Betriebssystem. GCC bot die Möglichkeit, Anwendungen kompilieren zu können, aber Sie stoßen auf die gleiche Art von Problemen. Der Code wird nur eine bessere Leistung haben. Der RIA-Ansatz scheint zu funktionieren, fühlt sich aber nicht wie eine native Anwendung an.

2

Nun, um ehrlich zu sein, ist der einzige garantierte Weg, um eine App plattformübergreifend auf einmal zu erstellen, Java zu verwenden, aber es erfordert eine ziemlich lange Laufzeit, um zuerst installiert zu werden.

Wenn dies jedoch keine Option ist, würde ich empfehlen, die jüngsten Entwicklungen in Qt im Auge zu behalten - es ist jetzt verfügbar (oder sollte bald) unter der LGPL, was bedeutet, dass Sie wahrscheinlich nicht dafür bezahlen müssen nicht mehr. Die Verwendung von GCC mit Qt, wie ich festgestellt habe, funktioniert perfekt beim Cross-Compilieren auf verschiedenen Plattformen, solange Sie nur Qt's Klassen/Code/Objekte verwenden und sicherstellen, dass kompilierter Nicht-Qt-Code kompiliert werden kann plattformübergreifend

3

Der Versuch, Anwendungen auf einer einzigen Plattform zu entwickeln, die auf vielen Plattformen verwendet wird, ist kein guter Ansatz. Im besten Fall werden Sie Anwendungen erstellen, die sich den Benutzern der Plattformen fremd vorkommen, für die Sie nicht entwickelt haben.

Wahrscheinlicher ist, dass Sie in Bereichen, die Sie nie aufgegeben haben, auf subtile Kompatibilitätsprobleme stoßen. Java ist wahrscheinlich der beste Weg zu gehen, wenn Sie diese Route gehen wollen. Cross-Compiling führt zu automatisch generiertem Code, der ein Albtraum für Debugging und Wartung sein wird.

Sicherlich können Sie in einigen Fällen Tools für die Portierung verwenden, aber ich denke nicht, dass dies ein Problem ist, für das Sie im Allgemeinen eine automatisierte Lösung bereitstellen können.

2

Sie erwähnen keine spezielle Programmiersprache (aber ich vermute C oder C++ wegen der GUI-Toolkits), so dass es schwierig ist, eine gute Antwort auf das zu geben, was Sie tatsächlich fragen.

Wenn Sie "wahre" Cross-Plattform wollen, würde ich zuerst prüfen, ob es möglich ist, Ihr Problem mit einer Sprache zu lösen, die weniger Plattform gebunden ist. Python, Java und viele andere erlauben es Ihnen, auf einer Plattform zu schreiben und auf vielen zu laufen.

Wenn Sie immer noch C/C++ verwenden möchten, bietet GCC Ihnen die Möglichkeit des Cross-Compilierens, und wenn Sie das mit QT kombinieren (das bald unter der LGPL verfügbar sein wird), sollten Sie etwas arbeiten können.

1

Auch wenn Sie ein plattformübergreifendes GUI-Toolkit verwenden, werden nicht alle Ihre plattformübergreifenden Probleme entfernt. Es gibt schließlich mehr als eine GUI für eine App. Cross Compiling wird niemals alle Probleme erfassen, die ein nativer Build auch erfasst. Wenn Sie mehrere Plattformen unterstützen, müssen Sie unter mindestens auf jeder Plattform testen. Aber hoffentlich können Sie native Builds mit allen Warnungen, zusätzlich zum Testen durchführen.

8

In meiner Firma verwenden wir das Mozilla Framework, um plattformübergreifende Wörterbuchprodukte zu entwickeln. Diese Anwendungen basieren auf dem Gecko/Necko Browser und der Großteil der Entwicklung erfolgt über Javascript, HTML, CSS, XSL, XUL, ... Natürlich musste unsere Homebrew-Suchmaschine zu den drei Plattformen kompiliert werden (mit etwas anderem Code, der zuerst in JS gemacht wurde und dann aus Geschwindigkeitsgründen in moz 'C++ portiert wurde.

Am Ende haben wir eine vernünftig plattformübergreifende Lösung: Unsere Entwickler arbeiten meist wie Power-Web-Entwickler (denken Sie Client-und Server-Seite zur gleichen Zeit). Da der Gecko auf den drei Plattformen derselbe ist, wissen wir, dass er vorhersehbar aussehen und sich genauso verhalten wird (außer wenn es Bugs gibt, aber die Plattform ist in dieser Hinsicht ziemlich ausgereift).

Unser R & D weiß, wie langsamer JavaScript-Code in einen relativ schnellen portablen C++ - Code portiert werden kann (Sie verwenden Mozilla-Code mit der NSPR-Bibliothek, einer plattformübergreifenden Bibliothek). Das Testen muss immer auf der drei Plattform durchgeführt werden, aber mit der Zeit und Erfahrung erfahren Sie, was wo bricht (Font-Unterstützung, Audio-Unterstützung, Flash-Unterstützung) ...

Heute sollten Sie wahrscheinlich eine haben Schauen Sie sich XULRunner das ist wirklich der Mozilla ohne echte Browser-Schnittstelle (im Jahr 2002, mussten wir den Mozilla Browser zu demontieren, um es in unserer ersten Produktfarbe neu zu streichen). Natürlich funktioniert es gut für einfache Anwendungen, aber wenn Sie OpenGL, 3D Audio und andere raffinierte Dinge machen wollen, wird XULRunner zu begrenzt erscheinen.

Ich glaube Blizzard einige Cross-Plattform-Rahmen für diese Art der Sache ... Glück :)

Gut hat!

Pierre.

1

In den letzten Monaten habe ich ein paar großartige Videos gefunden, die dieses Thema der plattformübergreifenden Entwicklung untersuchen. Ich hoffe, Sie finden sie auch nützlich.

QtCreator

http://www.youtube.com/watch?v=aYiPvM7ZRHA&feature=channel

Flexbuilder

http://www.youtube.com/watch?v=_O_xDXRsh3Y&feature=channel

Mono/MonoDevelop

http://www.youtube.com/watch?v=U6VG_Z0aRek

Ich habe persönlich hatte Erfolg mit Silverlight/MacOS X

Realbasic

http://www.youtube.com/watch?v=GWipoBeKSRk

1

für Cross-Plattform-Entwicklung Sie Telefon verwenden können, Lücke, Appcelerator (Titanium), Corona ... Dies alles bietet ein Framework, das auf JavaScript basiert und endlich auf verschiedenen Plattformen laufen kann. Was ich benutze, ist Titanium für die mobile Entwicklung, was uns erlaubt, Anwendungen mit nativen Codes zu entwickeln .... (was ein sehr guter Vorteil ist). Phone Gap bietet eine Web-App, die im Allgemeinen nicht nativ ist ... Diese Software wird für die Entwicklung von plattformübergreifenden Unterstützung verwendet ... mit Unterstützung für Windows, Linux und Mac OS.

0

Basierend auf meiner persönlichen Erfahrung glaube ich, dass Sie Java übernehmen sollten: Sie werden viele Kopfschmerzen vermeiden.

Sie entwickeln auf jeder Plattform, die Sie mögen, und Sie implementieren sie auf allen anderen Plattformen, ohne dass Sie für jede Zielplattform kompilieren müssen, wie Sie bereits erwähnt haben.

Zum Beispiel, ich entwickle unter Linux, ich traf "kompilieren" nur einmal und die resultierende Datei ist bereit, überall ausgeführt werden (Windows, Mac, Solaris, z/OS, Sie nennen es). Ein Doppelklick führt es auf jeder Plattform aus (Java Runtime muss installiert sein, aber die meisten Benutzer haben es bereits installiert und wenn nicht, ist es eine Frage des Herunterladens, Installierens, "Next>", "Next>", "OK").

Wenn Sie die Bereitstellungsmethode "Java Web Start" wählen, wird es noch einfacher: Der Benutzer klickt einfach auf die Startschaltfläche auf einer Webseite und die Anwendung wird ausgeführt (wenn die richtige JVM gemäß den Angaben im JNLP-Deskriptor installiert wird) oder der Benutzer wird auf die Java-Download-Seite umgeleitet (falls keine passende JVM gefunden wird).

GUI-Entwicklung (mit Swing-Toolkit) ist einfach und leistungsstark, vor allem, wenn Sie das richtige Tool (d. H. Netbeans IDE) verwenden.