Portierung auf Android

Die meisten Qt-Anwendungen sollten sich problemlos auf Android portieren lassen, es sei denn, sie hängen von einer bestimmten Hardware- oder Softwarefunktion ab, die von Android nicht unterstützt wird.

Der Portierungsansatz hängt davon ab, ob die vorhandene Anwendung QML- oder Widget-basiert ist, welches Build-Tool Sie verwenden und ob Sie von einer mobilen oder einer Desktop-Anwendung portieren.

QML-basierte Anwendungen, die mit CMake erstellt wurden, gelten als die beste Vorgehensweise für mobile Anwendungen.

Portierung von Qt-Desktop-Anwendungen

Der Großteil Ihres vorhandenen Qt-Codes sollte funktionieren, aber Sie müssen einige Entscheidungen bezüglich der Skalierbarkeit der Benutzeroberfläche und des Layouts für verschiedene Ausrichtungen und Bildschirmgrößen treffen. Ziehen Sie einen Ansatz für responsive Layouts in Betracht, um die Vorteile von Qt Qml Applications voll auszuschöpfen.

Es gibt Überlegungen, die sich nicht direkt auf die Verwendung von Qt auswirken, wie z.B. App-Store-Richtlinien, Themenrichtlinien und andere, die sich auf die Art und Weise auswirken können, wie Sie Ihre Anwendung entwickeln. Diese werden hier nicht besprochen.

Hinzufügen von Ressourcen

Die meisten Anwendungen benötigen Ressourcen. Hier besprechen wir, wie sich das auf die Portierung Ihrer Anwendung auf Android auswirkt.

Verwendung des Qt-Ressourcensystems

Wie die meisten UI-Anwendungen sind auch Qt-Anwendungen von Ressourcen wie Bildern, Symbolen, Übersetzungsdateien usw. abhängig. Diese Ressourcen müssen auf dem Gerät verfügbar gemacht werden, da sie für die korrekte Funktion der Anwendung erforderlich sind.

Die bequemste Möglichkeit ist es, die Ressourcen in einer qrc-Datei zu bündeln, die in die Binärdatei der Anwendung integriert wird. Dieser Ansatz reduziert den Portierungsaufwand erheblich und ermöglicht einen schnelleren Zugriff auf die Ressourcen. Es handelt sich außerdem um einen plattformübergreifenden Ansatz, der die Portierung auf andere Plattformen erleichtert.

Standardmäßig können alle Qt-Anwendungen auf den Inhalt einer qrc-Datei mit dem Präfix ":/" oder dem URL-Schema-Präfix "qrc:" zugreifen. Um mehr über qrc-Dateien und deren Handhabung zu erfahren, lesen Sie bitte das Qt Resource System.

Hinzufügen von Ressourcen mit dem Asset-Ansatz

Qt für Android bietet ein spezielles, virtuelles Dateisystem, das auf dem Android-Asset-Mechanismus basiert. Dateien, die im Verzeichnis"ANDROID_PACKAGE_SOURCE_DIR/assets/" abgelegt werden, werden als Teil Ihres Anwendungspakets verpackt.

Der Asset-Ansatz ist die beste Option für eine bessere Interoperabilität mit den Android-APIs. Sie können auf alle Ressourcen in dem Verzeichnis mit dem Präfix "assets:" zugreifen. Im Gegensatz zu qrc ist dieser Ansatz Android-spezifisch und keine plattformübergreifende Lösung.

Hinweis: Die Verwendung des Qt-Ressourcensystems bringt es mit sich, dass die qrc -Dateien in den gemeinsam genutzten Bibliotheken gebündelt sind, die zuerst entpackt und vom Linker geladen werden müssen, während die Android-Assets im APK komprimiert sind und direkt in Ihrer Anwendung verwendet werden können. Das bedeutet, dass die Verwendung der Android-Assets weniger Platz beanspruchen kann, aber es ist keine plattformübergreifende Lösung mit Qt.

Der Asset-Ansatz mit CMake

Wenn Sie zum ersten Mal CMake oder CMake mit Qt verwenden, lesen Sie bitte Build with CMake. Hier liegt der Schwerpunkt auf den Schritten, die für das Hinzufügen von Ressourcen gelten.

Sie werden wahrscheinlich einige Dinge ändern wollen, die von der Android Manifest-Datei gesteuert werden. Siehe Qt Android Manifest File Configuration für weitere Informationen dazu. Wahrscheinlich haben Sie bereits QT_ANDROID_PACKAGE_SOURCE_DIR wie folgt eingestellt:

set_property(TARGET target_name PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
             "${CMAKE_CURRENT_SOURCE_DIR}/android")

Nun können Sie Ihre Assets direkt in diesem Ordner ablegen oder einen benutzerdefinierten Schritt mit CMake ausführen, um sie vom Hauptprojektpfad in den Asset-Pfad zu kopieren.

Dann können Sie auf dieses Bild-Asset von C++ aus wie folgt zugreifen:

QImage image("assets:/images/happy.png");

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.