Android mit CMake

Mit der Migration zu Visual Studio 2022 gingen mir meine Android Builds verloren. Nun müssen diese neu erdacht werden.

Und eben dafür soll mir nun CMake aus der Patsche helfen.


Als ich das GATE Projekt mit dem Studio 2017 damals startete, legte ich auch eine parallel Solution für Android an, um mit den Standard-Toolkits, die beim Studio dabei waren, Android Apps bauen zu können.

Das funktionierte zwar recht gut, doch so musste ich jede neue Codedatei von Hand in mehrere Solutionzweige aufnehmen und diverse Build-Flags immer doppelt und dreifach warten.

Folglich soll auch diese Konfiguration von CMake übernommen werden:

1cmake -DCMAKE_SYSTEM_NAME=Android -A x64 path_to_src

reicht bei einem heutigen CMake aus, um Visual Studio automatisch zu finden und dort dessen installierte Android Features zu aktivieren.
Das Ergebnis ist eine generierte Visual Studio Solution (.sln), deren Projekte gegen das “Standard” Android NDK kompiliert und linkt.

Fehlende Paketierung

Während also meine Binärdateien schon brav generiert werden können, fehlt leider ein entscheidendes Detail: Das APK Paket.

Im alten VS 2017 wurde das vom Projekt-Template miterzeugt und baute ein APK Paket mit dem NativeActivity Modul aus der C++ Buildtoolchain.
So konnte man die neue App auch gleich im Emulator testen und sogar debuggen.

Noch weiß ich nicht, wie man das in CMake erzeugen lassen kann, also wird das wohl meine nächste Aufgabe werden.
Parallel stellt sich heraus, dass VS 2022 offenbar auch das Buildsystem Ant nicht mehr unterstützt, welches in VS 2017 noch Standard war.
Also ist auch hier noch eine Baustelle offen.

Fazit

Die Umstellung von VS-Solutions auf CMake ist bestimmt der richtige Schritt für die Zukunft. Aktuell ist das aber leider ein Rückschritt, da ich vorerst keine Android-Pakete mehr erstellen und testen kann.

Das ist zwar jetzt keine großes Drama … aber ich fand es schon toll, dass ich meine OpenGL GATE-Programme direkt auch als Android-App am Smartphone sehen konnte.
… aber das wird ja hoffentlich bald auch wieder funktionieren.