- Flappy Bird, solo C, sin Java/Kotlin, APK ligero (armeabi-v7a +arm64-v8a) < 100 kilobytes
Historia:
- En 2021 descubrí el repositorio
rawdrawandroid
- Eso me motivó a crear un juego simple con un APK lo más pequeño posible
- Decidí hacer un clon del juego Flappy Bird
- El primer intento fue con C++ e ImGui, pero fracasó
- El APK pesaba alrededor de 1 megabyte
- Existía la posibilidad de que el juego fallara
- El APK solo incluía la biblioteca
armeabi-v7a
- La estructura del proyecto era compleja y desordenada
Motivación:
- El 14 de septiembre de 2024 vi en el canal de Discord de Raylib a alguien que hizo Flappy Bird en C#
- Quise asumir el reto de llevar el tamaño de un APK para Android hecho en C a menos de 100 kilobytes
- Hoy en día, cuando hay APK que llegan a 500 megabytes, mantenerlo por debajo de 100 kilobytes es algo muy difícil
- Al final lo logré, pero no fue fácil
Implementación:
- Al principio compilé un Hello World en C, empaqueté la biblioteca en un APK y la transferí al dispositivo por USB
- Empecé a explorar los recursos del juego
- Al principio usé sonidos en formato ogg, pero surgieron problemas; luego cambié al formato mp3 y lo comprimí
- Intenté reproducir el sonido con BASS, pero era demasiado pesado, así que estudié OpenSLES para leer el formato MP3 sin problemas
- Usé imágenes png y encontré
upng, más ligero que stb_image, para resolver problemas de decodificación
- Renderizado con OpenGL ES 2 + shaders, reproducción de sonido con OpenSLES, decodificación png con
upng, uso de Android Native Activity
Compilación:
- Descargar Visual Studio 2022
- Abrir Visual Studio Installer
- Hacer clic en "Edit"
- Seleccionar desarrollo de aplicaciones clásicas en C++ y desarrollo de aplicaciones móviles en C++
- Descargar Android Studio (se necesitan apktool, sdk, ndk)
- Instalar NDK 25.2.9519653 (se puede usar una versión superior)
- La configuración del proyecto está en "Debug ARM", pero hay que corregir las rutas en
build.bat
- Compilar con CTRL + B
Derechos de autor:
- No reclamo derechos de autor. Los derechos del juego y de los recursos pertenecen a DotGEARS
Inspiración:
rawdrawandroid
- Flapper
- Raylib
- ImGui
Resumen de GN⁺:
- Este proyecto es un intento desafiante de crear un juego Flappy Bird para Android en lenguaje C
- Logra implementar el juego manteniendo el APK por debajo de 100 kilobytes
- Optimiza recursos usando varias tecnologías como OpenGL ES 2, OpenSLES y
upng
- Este proyecto ofrece a los ingenieros de software una visión sobre el desarrollo de juegos eficientes y de tamaño reducido
- Entre los proyectos con funciones similares están Raylib y
rawdrawandroid
1 comentarios
Comentarios en Hacker News
Ojalá hubiera un filtro de "apps de menos de 10 MB" en la tienda de aplicaciones
Comparten la experiencia de haber escrito una revisión bibliográfica sobre por qué la gente juega Flappy Bird
Comparten la experiencia de haber publicado un proyecto similar en Nim en 2020
El código tiene menos de 4k loc
Super Mario Bros pesaba 40 KB
Pensaban que se necesitaba algo de pegamento en Java para crear un APK de Android
Está buenísimo ver una app de Android de menos de 1 MB
Habría estado bien llamarlo "Floppy Bird"
Es refrescante y agradable ver programas/juegos/apps "hechos con esmero" en lugar de componentes inflados de terceros
Se preguntan si la técnica de escribir aplicaciones en C para Android usando rawdrawandroid también podría ser aprovechada por raylib (y otros frameworks en C)