4 Punkte von GN⁺ 2024-09-23 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2024-09-23
Hacker-News-Kommentare
  • Es wäre schön, wenn es im App Store einen Filter für „Apps unter 10 MB“ gäbe

    • Kleine Apps sind schneller und haben weniger Werbung oder Mikrotransaktionen
    • Eine 3-MB-Thermometer-App ist befriedigender als eine 150-MB-Thermometer-App
  • 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

    457 android_native_app_glue.c
    360 audio.c
    802 game.c
    201 init.c
    93 main.c
    39 mouse.c
    38 shaders.c
    229 texture.c
    1377 upng.c
    27 utils.c
    3623 total
    
  • 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

    • Sie laufen sogar auf älteren HTC-Geräten
    • Glückwunsch
  • Es wäre schön gewesen, wenn es „Floppy Bird“ geheißen hätte

    • Es würde auf eine 3,5-Zoll-Diskette passen
  • 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

    • Außerdem fragt man sich, ob sich über Termux eine C-Entwicklungsumgebung für Android auf Android selbst nutzen lässt