Behandeln Sie C ++ - Abhängigkeiten mit Clickable#

Wenn eine App von einer Bibliothek abhängt, die in Ubuntu Touch nicht vorinstalliert ist, muss die App diese im Click-Paket mitliefern. Diese Anleitung zeigt, wie dies mit Clickable geschehen kann.

Erstellung#

Manchmal sind Bibliotheken vorkompiliert verfügbar, so dass Sie den Kompilierschritt überspringen können. Das Kompilieren Ihrer Abhängigkeit wird jedoch empfohlen, da Sie dadurch mehr Kontrolle über den gesamten Prozess haben und möglicherweise bessere Ergebnisse erzielen (z. B. eine bessere Leistung oder kleinere Paketgrößen).

Kompilierung#

Legen Sie den Quellcode der Bibliothek unter libs/LIBNAME ab (ersetzen Sie dabei LIBNAME durch den Namen der Bibliothek), da Clickable standardmäßig dort nach ihm sucht. Wenn der Quellcode der Abhängigkeit als Git-Repository verfügbar ist, ist es eine gute Idee, ihn als git submodule hinzuzufügen. Andernfalls fügen Sie ein Skript zum Herunterladen der Quellen hinzu.

Add a libraries section to your clickable.yaml, like this:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"

If the library does not contain a CMake configuration, you need to use the qmake or custom builder instead.

Optional können Sie die Kompilierung konfigurieren, indem Sie build_args hinzufügen, die wie folgt aussehen können:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     build_args:
     - "-DBUILD_EXAMPLES=OFF"
     - "-DBUILD_DOCS=OFF"
     - "-DBUILD_TESTS=OFF"
     - "-DBUILD_SHARED_LIBS=OFF"

Die meisten Build-Argumente sind projektspezifisch. Studieren Sie daher die Build-Anweisungen der Bibliothek und suchen Sie auch nach Optionseinstellungen in deren CMakeLists.txt.

To actually build the library for all architectures run clickable build --libs --arch armhf, clickable build --libs --arch arm64 and clickable build --libs --arch amd64. Don’t forget to mention this step in your README, so that others can reproduce the build process.

See how Teleports clickable.yaml uses the libraries feature to build its dependency tdlib.

Vorkompiliert#

Überspringe den Schritt, wenn du deine Bibliothek wie oben beschrieben kompiliert hast.

Eine vorgefertigte Bibliothek ist meist nur als gemeinsam genutztes Objekt verfügbar, das dynamisch verlinkt werden muss. Außerdem kann sie Komponenten enthalten, die du nicht benötigst, was zu einer aufgeblähten App führt. Möglicherweise kann die Bibliothek für deine Zwecke auch unvollständig sein, was du durch eigenständiges Kompilieren verhindern kannst. Manchmal ist eine Bibliothek in den Ubuntu Repositories verfügbar, aber nicht für deine Architektur (wahrscheinlich armhf oder arm64). In diesem Fall muss du die Bibliothek wie oben beschrieben kompilieren.

Falls die Bibliothek in den Ubuntu Repositories verfügbar ist, kannst du sie wie folgt der Abhängigkeitsliste hinzufügen:

 builder: "cmake"
 dependencies_target:
 - "libsomething-dev"

Clickable installiert das angegebene Paket automatisch für die Zielarchitektur innerhalb des Build-Containers. Ein Beispiel findest du in Guitar Tools‘ clickable.json.

If the library can be found in a PPA, you can add the PPA to the clickable.yaml, too. For example:

 builder: "cmake"
 dependencies_ppa:
 - "ppa:someone/libsomething"
 dependencies_target:
 - "libsomething-dev"

Anderenfalls füge zum Download der vorkonfigurierten Bibliothek ein Skript hinzu.

Benutzung#

Zuerst musst du das Include-Verzeichnis angeben, in dem sich die Header befinden die du in den Quellcode der App einbindenst. Dann musst du die Binärdatei der Bibliothek mit der Binärdatei der App verknüpfen.

Falls die Bibliothek eine CMake Konfigurationdatei beinhaltet, kannst du den find_package Befehl verwenden, welcher dich mit einem Ziel für eine Verlinkung versorgt oder mit Variablen, die auf die Binär- und Includeverzeichnisse zeigen. Dann könnten die zusätzlichen Zeilen deiner CMakeList.txt wie folgt aussehen:

find_package(SOMELIBRARY REQUIRED)

include_directories(${SOMELIBRARY_INCLUDE_DIRS})
target_link_libraries(mytarget ${SOMELIBRARY_LIBS})

Der Befehl find_package definiert normalerweise den Pfad zum Include-Verzeichnis als SOMELIBRARY_INCLUDE_DIRS und die Binärdateien der Bibliothek als SOMELIBRARY_LIBS (überprüfe in der Dokumentation der Bibliothek, was deren CMake-Konfiguration genau liefert). Verwende diese mit den Befehlen include_directories und target_link_libraries. Siehe Camera Scanner ImageProcessing CMakeLists.txt für ein Beispiel aus der Praxis.

Nun solltest Du durch die Eingabe von clickable desktop bereits mit dem Clickable’s desktop Modus testen können.

Bereitstellung#

Falls Du die Bibliotheken statisch verlinkt hast, kannst Du diesen Schritt überspringen, da die Bibliothek bereits in der Binärdatei Deine App beinhaltet ist.

Eruiere welche „shared object“ Dateien (*.so) Du mitliefern musst. Das machst Du indem Du die App auf Deinem Gerät mittels clickable && clickable logs startest. Du solltest anhand der Fehlermeldung sehen, welche Dateien fehlen.

Finde den Pfad zu den Shared Objectfiles. Für Bibliotheken, die mit Clickable erzeugt wurden, sind sie den jeweiligen Installationsverzeichnissen der Bibliotheken zu finden. Die Installationsverzeichnisse sind in den jeweiligen Build-Verzeichnissen der jeweiligen Bibliotheken (z.B. build/arm-linux-gnueabihf/opencv/install) enthalten. Für Pre-Build-Bibliotheken führe den Befehl clickable run "find / -name 'libSomething.so'" aus (ersetze``libSomething.so`` durch die Datei, die du suchst). Dieser sollte dir den Pfad zu der gesuchten Datei ausgeben (die dabei ausgegebenen Fehler können ignoriert werden). Generell ist /usr/lib ein guter Anhaltspunkt, wenn du nach Shared Objectfiles suchst.

To get the files into the click package, add the install_lib key to your clickable.yaml:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     install_lib:
     - "$LIBNAME_LIB_INSTALL_DIR/usr/lib/$ARCHITECTURE_TRIPLET/libqmapboxgl.so*"
     - "/usr/lib/$ARCHITECTURE_TRIPLET/libSoundTouch.so.*"

Die Zeilen oberhalb beinhalten zwei Beispiele. Die Erste, wie man eine Bibliothek installiert, weche mit „Clickable“ erzeugt wurde. Das Asterisk-Symbol in .so* hilft dabei, auch symbolische Links gemeinsam mit der eigentlichen Bibliothek zu finden, welche auf die aktuelle Version verweisen.

Je nach Bibliotek, müssen eventuell weitere Daten mitgeliefert werden. Für diesen Fall ist es hilfreich, in der ReadMe-Datei oder Installationsanletung der Bibliothek, nachzusehen.

Du solltest nun in der Lage sein durch die Ausführung von clickable dein Clickpackage zu erzeugen und auf einem an deinem Computer angeschlossenen Gerät zu installieren.