© creativica/Shutterstock.com
Native Cross-Plattform-Anwendungen mit RAD Studio

One for All


Nutzer möchten auf Geräten und Systemen ihrer Wahl arbeiten. Mit der integrierten Entwicklungsumgebung RAD Studio kann man native Apps für alle relevanten Systeme erstellen. Einsatzmöglichkeiten sowie Vor- und Nachteile betrachten wir in diesem Artikel.

„Write once, run anywhere“ ist schon seit eh und je ein Wunsch von Softwareentwicklern. Ein einmal geschriebenes Programm soll nach Möglichkeit auf allen Geräten (Desktop, Tablet, Smartphone) und Betriebssystemen (Windows, macOS, Linux, Android, iOS) ausführbar sein. Java kommt diesem Ziel schon recht nahe. Die Anwendungen laufen in einer virtuellen Maschine und können damit auf den unterschiedlichsten Zielgeräten ausgeführt werden. Hier ist man i. d. R. jedoch auf eine Geräteklasse, zum Beispiel den Desktop beschränkt. Die mobilen Devices sind zu verschieden, als dass man sie auch aus dieser Quellcodebasis vernünftig abdecken könnte. Ein anderer Nachteil ist der Einsatz der virtuellen Maschine. Zwischen Programmcode und Systemsoftware liegt eine Zwischenschicht, die Hardwareinteraktionen erschwert oder auch unmöglich macht. Die Performance kann bei zeitkritischen Anwendungen ebenso ein Problem sein.

Eine andere Möglichkeit für Cross-Plattform-Anwendungen stellen Webapplikationen jeder Art dar. Diese laufen im Browser und lassen sich auf einer Vielzahl von heterogenen Geräten ausführen, sofern das User Interface responsiv gestaltet ist. Trotz erweiterter Möglichkeiten von HTML5 ist der Zugriff aus dem Browser auf die Hardware des Geräts jedoch stark eingeschränkt. Ebenso lässt sich eine Offlinenutzung nur mit Einschränkungen realisieren.

Ein weiteres Argument dafür, nach Alternativen für die Cross-Plattform-Programmierung zu suchen, ist der anfallende Entwicklungsaufwand. Muss eine Applikation für mehr als ein System separat entwickelt werden, steigt der Aufwand fast linear mit der Anzahl der zu unterstützenden Systeme und Gerätetypen. Als besonders aufwendig und anspruchsvoll hat sich in diesem Zusammenhang die Gestaltung des User Interface herausgestellt. Windows, macOS und die verschiedenen Fenstermanager der Linux-Distributionen im Desktopbereich, sowie Android und iOS im mobilen Bereich, erfordern sehr unterschiedliche Vorgehensweisen, um anspruchsvolle und angepasste Benutzeroberflächen zu erstellen. Das betrifft sowohl inhaltliche als auch technische Aspekte. Kaum ein Entwickler bzw. Entwicklerteam kann sich in allen Plattformen und den dazu notwendigen Tools und Vorgehensweisen ausreichend auskennen.

Cross-Plattform-Interfaces mit FireMonkey

Wo kommen die Schwierigkeiten mit den unterschiedlichen grafischen Benutzeroberflächen auf den verschiedenen Systemen her? Hier gibt es mehrere Gründe. Zum einem stellt jedes Betriebssystem eine andere Programmierschnittstelle (API) bereit, d. h., die technischen Anforderungen unterscheiden sich. Ebenso bestehen inhaltliche Unterschiede. Das Aussehen (Design, Layout, verfügbare Controls/Widgets) sind auf den Systemen verschieden. Ein Beispiel ist die Anordnung von Registerkarten für die Navigation. In iOS werden diese am unteren Bildschirmrand platziert, dagegen findet man diese in Android an oberster Position eines Fensters. Die Darstellung der Programmfenster und der Oberflächenelemente in Windows, macOS und Linux sind zwar vergleichbar, aber im Detail dann doch anders.

Hinzu kommt der Umstand, dass sich auf Seiten der Hardware sehr unterschiedliche Voraussetzungen bieten. Die Bildschirmgrößen der zu unterstützenden Geräte und die Auflösungen sind meist sehr unterschiedlich. Aus Sicht der Programmentwicklung ist der Einsatz eines universellen Frameworks mit dem Ziel einer Abstraktion von Hardware und Systemsoftware wünschenswert. Ein solches Framework für eine Benutzerschnittstelle bietet dann eine einheitliche Programmierschnittstelle. Um die konkrete Umsetzung der Anforderungen auf dem Zielsystem muss man sich nicht mehr kümmern, das erledigt in diesem Fall das Framework.

Es gibt eine Reihe Frameworks, die genau dieses Ziel der Systemabstraktion für grafische Benutzeroberflächen verfolgen, beispielsweise OpenGL. Bei OpenGL handelt es sich um eine Spezifikation in Form einer systemnahen plattform- und programmiersprachenübergreifenden Programmierschnittstelle zur Entwicklung von 2D- und 3D-Grafikanwendungen. Der OpenGL-Standard umfasst etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in Echtzeit erlauben. Die Implementierung des OpenGL API erfolgt durch Systembibliotheken, auf einigen Betriebssystemen auch als Teil der Grafikkartentreiber. OpenGL und Varianten dieser Systembibliothek werden primär unter den Betriebssystemen Linux und Android eingesetzt. Für macOS wird nun auch die Grafik-Engine Metal 2 unterstützt. Für grafisch anspruchsvolle Applikationen unter Windows wird dagegen DirectX verwendet. Auch die Bibliotheken für DirectX sind Bestandteil des Betriebssystems und damit nah an der Hardware (Grafikkarte). DirectX und OpenGL ermöglichen somit grafikintensive Applikationen, zum Beispiel Spiele. Ihre Programmierung ist jedoch alles andere als einfach.

Um geräte- und plattformübergreifende Applikationen zu erstellen, ist eine weitere Abstraktionsschicht notwendig, zum Beispiel das hier vorgestellte Grafik-Framework FireMonkey. Es kommuniziert auf der einen Seite mit den jeweiligen Systembibliotheken (OpenGL, DirectX) und standardisiert die Programmierschnittstelle auf der anderen Seite. Auf diese Weise entsteht eine universelle Programmierschnittstelle, die über Geräte- und Plattformgrenzen hinweg eingesetzt werden kann. FireMonkey ermöglicht die Entwicklung grafischer Applikationen für die Betriebssysteme Windows, macOS, einige Linux-Distributionen, Android und iOS. Damit werden alle wichtigen Gerätetypen und Betriebssysteme für Nutzerapplikationen abgedeckt. FireMonkey bietet u. a. die folgenden Funktionen [1]: Basisfunktionen wie Fenster, Menüs und Dialogfelder; die Möglichkeit, 2D- und 3D-Grafiken darzustellen; verlustfreie Skalierung und die korrekte Anzeige auf unterschiedlichen Geräten und Bildschirmen dank des Einsatzes einer Vektor-Engine; Anzeige von Farbübergängen; grundlegende Formen für 2D-Grafiken mit einem integrierten Satz von Pinseln; Stiften, Geometrien und Transformationen; Basisobjekten und Funktionen für Darstellungen in 3D; Lese- und Schreibunterstützung für die Dateiformate jpeg, png, tiff, gif; im Hintergrund-Thread berechnete Animationen mit minimaler CPU-Nutzung und automatischer Bildfrequenzkorrektur und flexible Layouts für relative Positionierung der Oberflächenelemente. Ein besonderes Feature ist der Designer, der das Erstellen der Oberfläche vollständig in einem visuellen Prozess erlaubt. Dieser integriert sich nahtlos in die Entwicklungsumgebungen Delphi, C++-Builder bzw. RAD Studio.

Sy...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang