4 puan yazan GN⁺ 2024-09-23 | 1 yorum | WhatsApp'ta paylaş
  • Flappy Bird, yalnızca C, Java/Kotlin olmadan, APK boyutu (armeabi-v7a +arm64-v8a) < 100 kilobayt

Geçmiş:

  • 2021'de rawdrawandroid deposunu keşfetti
  • Mümkün olduğunca küçük APK boyutuna sahip basit bir oyun yapmak için motivasyon kazandı
  • Flappy Bird oyununun bir klonunu yapmaya karar verdi
  • İlk deneme C++ ve ImGui kullanılarak yapıldı ancak başarısız oldu
    • APK boyutu yaklaşık 1 megabayttı
    • Oyunun çökme ihtimali vardı
    • APK yalnızca armeabi-v7a kütüphanesini içeriyordu
    • Proje yapısı karmaşıktı ve düzenli değildi

Motivasyon:

  • 14 Eylül 2024'te Raylib Discord kanalında C# ile Flappy Bird yapan birini gördü
  • C diliyle Android için APK boyutunu 100 kilobaytın altına indirme fikrine meydan okumak istedi
  • Günümüzde APK boyutlarının 500 megabayta ulaştığı bir ortamda bunu 100 kilobaytın altında tutmak çok zor bir işti
  • Sonunda başardı ama kolay olmadı
Reklam

Gerçekleme:

  • İlk olarak C ile Hello World derleyip, kütüphaneleri APK olarak paketleyerek USB üzerinden cihaza aktardı
  • Oyunun kaynaklarını araştırmaya başladı
  • İlk başta ogg formatında ses kullandı ancak sorun yaşadı; ardından mp3 formatına geçip sıkıştırdı
  • Sesi oynatmak için BASS kullanmaya çalıştı ancak ağır olduğu için OpenSLES çalışarak MP3 formatını sorunsuz okuyacak hale getirdi
  • png görseller kullandı ve stb_image'dan daha hafif olan upng'yi bularak kod çözme sorununu çözdü
  • OpenGL ES 2 + shader ile render alma, OpenSLES ile ses çalma, upng ile png çözme ve Android Native Activity kullanıldı

Derleme:

  • Visual Studio 2022'yi indirin
    • Visual Studio Installer'ı açın
    • "Edit"e tıklayın
    • C++ klasik uygulama geliştirme, C++ mobil uygulama geliştirme seçeneklerini işaretleyin
  • Android Studio'yu indirin (apktool, sdk, ndk gerekli)
    • NDK 25.2.9519653'ü kurun (daha üst sürümler de kullanılabilir)
    Reklam
  • Proje ayarı "Debug ARM" olarak yapılandırılmıştır ancak build.bat içinde yolun düzeltilmesi gerekir
  • CTRL + B ile derleyin

Telif hakkı:

  • Telif hakkı iddia edilmiyor. Oyun ve kaynakların hakları DotGEARS'a aittir

İlham:

  • rawdrawandroid
  • Flapper
  • Raylib
  • ImGui

GN⁺ özeti:

  • Bu proje, C diliyle Android için Flappy Bird oyunu geliştirmeye yönelik iddialı bir denemedir
  • APK boyutunu 100 kilobaytın altında tutarken oyunu başarıyla gerçekleştirmiştir
  • Kaynakları optimize etmek için OpenGL ES 2, OpenSLES ve upng gibi çeşitli teknolojiler kullanılmıştır
  • Bu proje, yazılım mühendislerine küçük boyutlu ve verimli oyun geliştirme konusunda içgörü sunar
  • Benzer işlevlere sahip projeler arasında Raylib ve rawdrawandroid bulunur

1 yorum

 
GN⁺ 2024-09-23
Hacker News görüşleri
  • Uygulama mağazasında "10 MB altı uygulamalar" filtresi olsa keşke

    • Küçük uygulamalar daha hızlı oluyor ve daha az reklam ya da mikro ödeme içeriyor
    • 3 MB'lık bir termometre uygulaması, 150 MB'lık bir termometre uygulamasından daha tatmin edici
  • İnsanların neden Flappy Bird oynadığına dair bir literatür incelemesi yazma deneyimini paylaşıyor

  • Nim ile benzer bir projeyi 2020'de yayımlama deneyimini paylaşıyor

  • Kod 4k LOC'nin altında

    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 40 KB idi

  • Android APK oluşturmak için Java ile glue code gerektiğini sanıyordu

  • 1 MB'ın altında Android uygulamaları görmek gerçekten harika

    • Eski HTC cihazlarda bile çalışabiliyor
    • Tebrikler
  • Keşke adı "Floppy Bird" olsaymış

    • 3.5 inçlik floppy diske sığabilirdi
  • Şişirilmiş üçüncü taraf bileşenler yerine "özenle hazırlanmış" programlar/oyunlar/uygulamalar görmek ferahlatıcı ve güzel

  • rawdrawandroid kullanarak Android'de C uygulaması yazma tekniğinin raylib (ve diğer C framework'leri) ile de kullanılıp kullanılamayacağını merak ediyor

    • Termux üzerinden Android'de, Android için bir C geliştirme ortamı kullanmanın mümkün olup olmadığını merak ediyor