- Flappy Bird, nur C, ohne Java/Kotlin, APK-Größe (armeabi-v7a + arm64-v8a) < 100 Kilobyte
Geschichte:
- 2021 das
rawdrawandroid-Repository entdeckt
- Dadurch motiviert worden, ein einfaches Spiel mit möglichst kleiner APK-Größe zu entwickeln
- Beschlossen, einen Klon des Spiels Flappy Bird zu erstellen
- Der erste Versuch wurde mit C++ und ImGui umgesetzt, scheiterte jedoch
- Die APK war etwa 1 Megabyte groß
- Es bestand die Möglichkeit von Spielabstürzen
- Die APK enthielt nur die
armeabi-v7a-Bibliothek
- Die Projektstruktur war komplex und unübersichtlich
Motivation:
- Am 14. September 2024 im Raylib-Discord-Kanal jemanden gesehen, der Flappy Bird in C# erstellt hatte
- Wollte die Idee herausfordern, eine Android-APK in C mit einer Größe von unter 100 Kilobyte zu erstellen
- In einer Zeit, in der APKs heute 500 Megabyte erreichen, ist es sehr schwierig, unter 100 Kilobyte zu bleiben
- Am Ende gelungen, aber es war nicht einfach
Umsetzung:
- Zunächst Hello World in C kompiliert, die Bibliothek als APK paketiert und per USB auf das Gerät übertragen
- Anschließend begonnen, die Ressourcen des Spiels zu untersuchen
- Zuerst Sounds im
ogg-Format verwendet, dabei traten jedoch Probleme auf; später auf mp3 umgestellt und komprimiert
- Versucht, Sound mit BASS abzuspielen, aber das war zu schwergewichtig; daher OpenSLES gelernt, um das
MP3-Format problemlos einzulesen
png-Bilder verwendet und mit upng eine leichtere Alternative zu stb_image gefunden, um Dekodierungsprobleme zu lösen
- Rendering mit OpenGL ES 2 + Shadern, Soundwiedergabe mit OpenSLES, PNG-Dekodierung mit
upng, Verwendung von Android Native Activity
Build:
- Visual Studio 2022 herunterladen
- Visual Studio Installer öffnen
- Auf "Edit" klicken
- Die Optionen für die Entwicklung klassischer C++-Anwendungen und mobiler C++-Anwendungen auswählen
- Android Studio herunterladen (
apktool, sdk, ndk erforderlich)
- NDK 25.2.9519653 installieren (höhere Versionen können ebenfalls verwendet werden)
- Das Projekt ist auf "Debug ARM" eingestellt, aber in
build.bat müssen die Pfade angepasst werden
- Mit
CTRL + B kompilieren
Urheberrecht:
- Es wird kein Urheberrecht beansprucht. Die Rechte am Spiel und an den Ressourcen liegen bei DotGEARS
Inspiration:
rawdrawandroid
- Flapper
- Raylib
- ImGui
Zusammenfassung von GN⁺:
- Dieses Projekt ist ein ambitionierter Versuch, das Spiel Flappy Bird für Android in C zu entwickeln
- Es ist gelungen, das Spiel zu implementieren und die APK-Größe dabei unter 100 Kilobyte zu halten
- Zur Optimierung der Ressourcen wurden verschiedene Techniken wie OpenGL ES 2, OpenSLES und
upng eingesetzt
- Das Projekt bietet Softwareentwicklern Einblicke in die Entwicklung effizienter Spiele mit sehr kleiner Größe
- Ähnliche Projekte mit vergleichbarer Zielsetzung sind Raylib und
rawdrawandroid
1 Kommentare
Hacker-News-Kommentare
Es wäre schön, wenn es im App Store einen Filter für „Apps unter 10 MB“ gäbe
Jemand berichtet von der Erfahrung, eine Literaturübersicht darüber geschrieben zu haben, warum Menschen Flappy Bird spielen
Jemand berichtet, 2020 ein ähnliches Projekt in Nim veröffentlicht zu haben
Der Code umfasst weniger als 4k LOC
Super Mario Bros. war 40 KB groß
Man dachte, zum Erstellen eines Android-APK sei etwas Java-Glue-Code nötig
Es ist wirklich cool, Android-Apps unter 1 MB zu sehen
Es wäre schön gewesen, wenn es „Floppy Bird“ geheißen hätte
Es ist erfrischend und schön, statt der üblichen aufgeblähten Third-Party-Komponenten ein „mit Sorgfalt gemachtes“ Programm/Spiel/eine App zu sehen
Jemand fragt sich, ob sich die Technik, mit rawdrawandroid C-Anwendungen für Android zu schreiben, auch mit raylib (und anderen C-Frameworks) nutzen lässt