BlinCT
BlinCT9. Dezember 2018 10:15

SNAP Tutorial 02. Beispiel-Snap-Paket einer auf Qt 5.11.0 basierenden Anwendung

Grüße an alle in der Fortsetzung des Themas zum eigenständigen Snap-Paket.
Seit der Veröffentlichung des vorherigen Artikels, in dem ich begonnen habe, Ihnen die Snap-Technologie aus meiner Erfahrung und Anwendung vorzustellen, ist viel Zeit vergangen. Die ganze Schuld der Zeit, des Geschäfts und der Faulheit war natürlich auch vorhanden)
Aber wir werden das Thema jetzt fortsetzen)


Als nächstes werden wir diese Technologie am Beispiel meiner Anwendung analysieren. Ich muss sagen, dass es noch nicht ganz fertig ist, aber etwas daran funktioniert. Einige Funktionen wurden überarbeitet. Unter dem Link können Sie es von meiner Dropbox herunterladen. Bisher ist die Anwendung noch nicht im offiziellen Store, da sie noch nicht vollständig fertig ist.
In den folgenden Artikeln werden wir uns ansehen, wie Sie die Anwendung in den Store stellen.

Projektstruktur:

/
--scripts
----bin
------projecttimer
----Qt
--snap
----gui
----snapcraft.yaml

Snap-Paket

Die Installation der Anwendung ist einfach, die Übertragung auf den Computer und die Konsole.
sudo snap install --dangerous <Paketname>
Eine sehr wichtige Nuance, die Anwendung funktioniert nicht auf dem System, wenn Sie eine AMD-Karte haben und proprietäre Treiber installiert sind. Problem mit libdrm. Dies wird jetzt gelöst, aber im Moment sieht die Situation so aus.

name: managetime
version: "0.1.0"
summary: timer
description: |
    Application for time management
confinement: strict
grade: stable
architectures: [amd64]

base: core18

apps:
    managetime:
        command: bin/projecttimer
        plugs: 
            - home
            - unity7
            - x11
            - opengl
            - pulseaudio
            - wayland
            - network
            - desktop
            - desktop-legacy
        environment:
            XDG_RUNTIME_DIR: /run/user/1000
            __EGL_VENDOR_LIBRARY_DIRS: $SNAP/etc/glvnd/egl_vendor.d:$SNAP/usr/share/glvnd/egl_vendor.d
            # XKB config
            XKB_CONFIG_ROOT: $SNAP/usr/share/X11/xkb
            # Qt Platform to Wayland
            #QT_QPA_PLATFORM: wayland
            QT_QPA_PLATFORM: xcb
            QTCHOOSER_NO_GLOBAL_DIR: 1
            QT_SELECT: snappy-qt5
            # Qt Modules
            LD_LIBRARY_PATH: $SNAP/Qt/5.11.0/gcc_64/lib:$LD_LIBRARY_PATH
            QT_PLUGIN_PATH: $SNAP/Qt/5.11.0/gcc_64/plugins
            QML2_IMPORT_PATH: $QML2_IMPORT_PATH:$SNAP/Qt/5.11.0/gcc_64/qml
            QT_QPA_PLATFORM_PLUGIN_PATH: $SNAP/Qt/5.11.0/gcc_64/plugins/platforms
            # XDG Config
            XDG_CONFIG_DIRS: $SNAP/etc/xdg:$SNAP/usr/xdg:$XDG_CONFIG_DIRS
            XDG_DATA_DIRS: $SNAP/usr/share:$XDG_DATA_DIRS
            # Font Config and themes
            FONTCONFIG_PATH: $SNAP/etc/fonts/conf.d
            FONTCONFIG_FILE: $SNAP/etc/fonts/fonts.conf
            # Tell libGL where to find the drivers
            LIBGL_DRIVERS_PATH: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/dri
parts:
    managetime:
        plugin: dump
        source: scripts
        source-type: local
        build-attributes: 
            - keep-execstack

    integration:
        plugin: nil
        stage-packages:
            - libc6
            - zlib1g
            - libstdc++6
            - libgcc1
            - libglib2.0-0
            - libpcre3
            - libxext6
            - libx11-6
            - libxcb1
            - libxau6
            - libxdmcp6
            - libbsd0
            - libxdamage1
            - libxfixes3
            - libx11-xcb1
            - libxcb-glx0
            - libxcb-dri3-0
            - libxcb-present0
            - libxcb-dri2-0
            - libxxf86vm1
            - libxshmfence1
            - libxcb-sync1
            - libpulse-mainloop-glib0
            - libpulse0
            - libsystemd0
            - liblzma5
            - liblz4-1
            - libgcrypt20
            - libgpg-error0
            - libwrap0
            - libsndfile1
            - libflac8
            - libogg0
            - libvorbis0a
            - libvorbisenc2
            - libasyncns0
            - libdbus-1-3
            - libfontconfig1
            - libfreetype6
            - libpng16-16
            - libexpat1
            - libxi6
            - libxrender1
            - libdrm2
            - libwayland-client0
            - libwayland-cursor0
            - libffi6
            - libxkbcommon0
            - libxcomposite1
            - libgl1
            - libgl1-mesa-dri
            - libgl1-mesa-glx
            - libdrm-common
            - libtinfo5

Beginnen wir mit einer kurzen Beschreibung:
Confinement: hat derzeit 3 Constraint-Modi, Strict, Classic und Devmode

  1. strict - strenge Sicherheitsbeschränkung des Systemkerns. Die Anwendung hat keinen Zugriff auf Systemschnittstellen, Benutzerverzeichnis, Netzwerkzugriff, Audiosystem usw.
  2. devmode - Debug-Modus. Wird für Entwickler verwendet.
  3. classic - Die Anwendung hat keine Einschränkungen. Analog - deb-Pakete, rpm. Das heißt, die Anwendung hat uneingeschränkten Zugriff auf das System.

base: core18 - Die Anwendung basiert auf core18, der für Schnittstellen im System und Anwendungen zuständig ist.

Anwendungen: - Teil der Anwendungskonfiguration
managetime: - der Name der Anwendung im System (z. B. in der Konsole bei der Suche)

Befehl: bin/projecttimer - was mit Namen aufgerufen wird (managetime). Es gibt auch eine Option, das Skript vor der Binärdatei zu platzieren, wenn Sie etwas im System tun müssen, bevor Sie die Anwendung starten.

Plugins: - Plugins, die die Anwendung verwendet. Bald sieht der Benutzer während der Installation ein Fenster auf dem Desktop, in dem er sieht, wo die Anwendung aufsteigt und was sie im System tut. Vereinfachen Sie das Verständnis der Funktionalität.

Es gibt Plugins, die automatisch verbunden werden, aber es gibt auch solche, die manuell verbunden werden müssen.

Mittwoch: - Umgebungseinstellung. Sie können dies in ein Bash-Skript einfügen und so etwas tun.
Befehl: myconfig.sh bin/projecttimer
aber ich habe es hierher gebracht, weil es einfacher ist zu sehen, was sich in den Umgebungseinstellungen befindet.

parts:
    managetime:
        plugin: dump
        source: scripts

All dies zusammen legt nahe, dass Sie die Anwendung erstellen müssen, z. B. aus dem Quellcode kompilieren, was bedeutet, dass Sie ein Plugin haben: cmake, qmake oder eine andere Option.
In meinem Fall wird alles aus dem Skriptverzeichnis kopiert und im Paket abgelegt. Es enthält sowohl die Anwendungsbinärdatei selbst als auch das erforderliche Qt

integration:
        plugin: nil
        stage-packages:

Dies ist der interessanteste Teil. In diesem Teil geben wir an, welche Pakete und deren Versionen benötigt werden, damit die Anwendung funktioniert, und nehmen sie isoliert vom Snap-Paket selbst heraus.
Möglicherweise fragen Sie sich, wie Sie alle Abhängigkeiten herausfinden können. Antwort, es gibt mehrere Möglichkeiten:

  1. ldd in der Anwendungskonsole und sehen, was es ausführen möchte. Natürlich haben die erforderlichen Abhängigkeiten andere Abhängigkeiten) ja, es macht Spaß, bis zum Ende zu kommen)
  2. Laufwerk in Abhängigkeitsschleife und Abhängigkeitsabhängigkeiten.
  3. Verwenden Sie die Anwendung von Interesse linuxdeployqt

Sie füttern die Anwendung mit einer Binärdatei, dem Pfad zu den Bibliotheken, die Sie für die Anwendung verwendet haben (ich spreche von Qt), und dieses Programm spuckt sowohl qt als auch system aus. Wenn ich mich nicht irre, wird diese App bald in Snap sein. So wird es für den Entwickler einfacher, damit zu arbeiten.

Im nächsten Artikel besprechen wir, wie Sie unsere Anwendung so einrichten, dass sie nicht nur von der Konsole, sondern auch von der Grafik aus gesucht und gestartet werden kann. Ein Snap-Paket mit einem Dienst und wie man ihn startet und beendet.

Bei Fragen oder Anregungen wenden Sie sich bitte an)
Danke allen.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken