- Flappy Bird, uniquement en C, sans Java/Kotlin, APK léger (armeabi-v7a + arm64-v8a) < 100 kilooctets
Historique :
- En 2021, découverte du dépôt rawdrawandroid
- Motivation à créer un jeu simple avec un APK aussi petit que possible
- Décision de réaliser un clone de Flappy Bird
- Une première tentative a été menée avec C++ et ImGui, mais a échoué
- La taille de l’APK était d’environ 1 mégaoctet
- Le jeu pouvait planter
- L’APK ne contenait que la bibliothèque armeabi-v7a
- La structure du projet était complexe et mal organisée
Motivation :
- Le 14 septembre 2024, sur le canal Discord de Raylib, aperçu de quelqu’un qui avait créé Flappy Bird en C#
- Envie de relever le défi de produire un APK Android en C de moins de 100 kilo-octets
- À une époque où les APK atteignent aujourd’hui 500 mégaoctets, rester sous les 100 kilo-octets est extrêmement difficile
- Succès final, mais cela n’a pas été facile
Implémentation :
- Au départ, compilation d’un Hello World en C, empaquetage de la bibliothèque dans un APK, puis transfert vers l’appareil via USB
- Début de l’exploration des ressources du jeu
- Au début, utilisation de sons au format ogg, mais des problèmes sont apparus ; passage ensuite au format mp3 avec compression
- Tentative d’utiliser BASS pour lire le son, mais la bibliothèque était trop lourde ; étude d’OpenSLES pour lire le format MP3 sans problème
- Utilisation d’images png, puis recherche de upng, plus léger que stb_image, pour résoudre les problèmes de décodage
- Rendu avec OpenGL ES 2 + shaders, lecture audio avec OpenSLES, décodage png avec upng, utilisation d’Android Native Activity
Build :
- Télécharger Visual Studio 2022
- Ouvrir Visual Studio Installer
- Cliquer sur "Edit"
- Sélectionner les éléments de développement d’applications C++ classiques et d’applications mobiles C++
- Télécharger Android Studio (apktool, sdk, ndk nécessaires)
- Installer NDK 25.2.9519653 (les versions supérieures peuvent aussi être utilisées)
- La configuration du projet est définie sur "Debug ARM", mais il faut modifier les chemins dans
build.bat
- Compiler avec CTRL + B
Droits d’auteur :
- Aucune revendication de droits d’auteur. Les droits sur le jeu et les ressources appartiennent à DotGEARS
Inspiration :
- rawdrawandroid
- Flapper
- Raylib
- ImGui
Récapitulatif GN⁺ :
- Ce projet est une tentative ambitieuse de créer un jeu Flappy Bird pour Android en langage C
- Il réussit à implémenter le jeu tout en maintenant la taille de l’APK sous les 100 kilo-octets
- Il optimise les ressources grâce à diverses technologies comme OpenGL ES 2, OpenSLES et upng
- Ce projet offre aux ingénieurs logiciel des pistes sur le développement de jeux efficaces en très petite taille
- Parmi les projets aux fonctionnalités similaires, on trouve Raylib et rawdrawandroid
1 commentaires
Avis sur Hacker News
Ce serait bien qu'il y ait un filtre « applications de moins de 10 Mo » dans les app stores
Partage d'une expérience de rédaction d'une revue de littérature sur les raisons pour lesquelles les gens jouent à Flappy Bird
Partage d'une expérience de publication d'un projet similaire en Nim en 2020
Le code fait moins de 4k loc
Super Mario Bros faisait 40 Ko
La personne pensait qu'il fallait du code Java de liaison pour créer un APK Android
C'est vraiment génial de voir une application Android de moins de 1 Mo
Ça aurait été bien de l'appeler « Floppy Bird »
C'est rafraîchissant et agréable de voir un programme/jeu/application « fabriqué avec soin » au lieu de composants tiers gonflés déjà existants
La personne se demande si la technique consistant à écrire des applications C pour Android avec rawdrawandroid pourrait aussi être utilisée par raylib (et d'autres frameworks C)