- Flappy Bird, apenas em C, sem Java/Kotlin, APK leve (armeabi-v7a + arm64-v8a) < 100 kilobytes
Histórico:
- Em 2021, encontrou o repositório rawdrawandroid
- Surgiu a motivação de criar um jogo simples com o menor tamanho de APK possível
- Decidiu fazer um clone do jogo Flappy Bird
- A primeira tentativa foi feita com C++ e ImGui, mas fracassou
- O APK tinha cerca de 1 megabyte
- Havia possibilidade de o jogo travar
- O APK incluía apenas a biblioteca armeabi-v7a
- A estrutura do projeto era complexa e desorganizada
Motivação:
- Em 14 de setembro de 2024, viu no canal do Discord do Raylib alguém que fez Flappy Bird em C#
- Quis desafiar a ideia de criar um APK para Android em C com menos de 100 kilobytes
- Hoje, quando os APKs chegam a 500 megabytes, manter isso abaixo de 100 kilobytes é algo muito difícil
- No fim, conseguiu, mas não foi fácil
Implementação:
- Primeiro compilou um Hello World em C, empacotou a biblioteca em um APK e o transferiu para o dispositivo via USB
- Começou a explorar os recursos do jogo
- No início usou sons no formato ogg, mas surgiram problemas; depois mudou para o formato mp3 e o comprimiu
- Tentou usar o BASS para reproduzir som, mas era pesado; então estudou OpenSLES para ler o formato MP3 sem problemas
- Usou imagens png e encontrou o upng, mais leve que stb_image, resolvendo problemas de decodificação
- Renderização com OpenGL ES 2 + shaders, reprodução de som com OpenSLES, decodificação de png com upng e uso de Android Native Activity
Build:
- Baixar o Visual Studio 2022
- Abrir o Visual Studio Installer
- Clicar em "Edit"
- Selecionar os itens de desenvolvimento de aplicativos clássicos em C++ e desenvolvimento de aplicativos móveis em C++
- Baixar o Android Studio (apktool, sdk, ndk necessários)
- Instalar o NDK 25.2.9519653 (versões superiores também podem ser usadas)
- A configuração do projeto está em "Debug ARM", mas é necessário ajustar os caminhos no
build.bat
- Compilar com CTRL + B
Direitos autorais:
- Não reivindica direitos autorais. Os direitos do jogo e dos recursos pertencem à DotGEARS
Inspiração:
- rawdrawandroid
- Flapper
- Raylib
- ImGui
Resumo do GN⁺:
- Este projeto é uma tentativa desafiadora de criar um jogo Flappy Bird para Android em C
- Teve sucesso em implementar o jogo mantendo o tamanho do APK abaixo de 100 kilobytes
- Otimiza os recursos usando várias tecnologias, como OpenGL ES 2, OpenSLES e upng
- Este projeto oferece aos engenheiros de software insights sobre o desenvolvimento de jogos eficientes e de tamanho reduzido
- Projetos com funcionalidade semelhante incluem Raylib e rawdrawandroid
1 comentários
Opiniões no Hacker News
Seria ótimo se a app store tivesse um filtro de "apps com menos de 10 MB"
Compartilhamento de uma experiência de ter escrito uma revisão bibliográfica sobre por que as pessoas jogam Flappy Bird
Compartilhamento de uma experiência de ter publicado um projeto parecido em Nim em 2020
O código tem menos de 4k loc
Super Mario Bros tinha 40 KB
Achava que era preciso fazer uma colagem em Java para criar um APK Android
É muito legal ver um app Android com menos de 1 MB
Talvez tivesse sido melhor chamar de "Floppy Bird"
É revigorante ver um programa/jogo/app "feito com capricho" em vez de componentes de terceiros já inflados
Fica a dúvida se a técnica de usar rawdrawandroid para escrever aplicações em C no Android também poderia ser usada pelo raylib (e outros frameworks em C)