4 points par GN⁺ 2024-09-23 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2024-09-23
Avis sur Hacker News
  • Ce serait bien qu'il y ait un filtre « applications de moins de 10 Mo » dans les app stores

    • Les petites applications sont plus rapides et contiennent moins de publicités ou de microtransactions
    • Une application thermomètre de 3 Mo est plus satisfaisante qu'une application thermomètre de 150 Mo
  • 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

    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 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

    • Elle peut même tourner sur un vieux HTC
    • Félicitations
  • Ça aurait été bien de l'appeler « Floppy Bird »

    • Ça pourrait tenir sur une disquette 3,5 pouces
  • 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)

    • Elle se demande aussi s'il est possible d'utiliser un environnement de développement C pour Android sur Android via Termux