- Flappy Bird, hanya C, tanpa Java/Kotlin, ukuran APK (armeabi-v7a +arm64-v8a) < 100 kilobyte
Riwayat:
- Menemukan repositori rawdrawandroid pada 2021
- Termotivasi untuk membuat game sederhana dengan ukuran APK sekecil mungkin
- Memutuskan untuk membuat klon game Flappy Bird
- Percobaan pertama dilakukan dengan C++ dan ImGui, tetapi gagal
- Ukuran APK sekitar 1 megabita
- Ada kemungkinan game mengalami crash
- APK hanya menyertakan pustaka armeabi-v7a
- Struktur proyek rumit dan tidak tertata rapi
Motivasi:
- Pada 14 September 2024, melihat seseorang di kanal Discord Raylib yang membuat Flappy Bird dengan C#
- Menjadi ingin menantang ide membuat APK Android dalam C dengan ukuran di bawah 100 kilobyte
- Di masa sekarang, ketika ukuran APK bisa mencapai 500 megabita, menjaga ukuran tetap di bawah 100 kilobyte adalah hal yang sangat sulit
- Pada akhirnya berhasil, tetapi tidak mudah
Implementasi:
- Awalnya mengompilasi Hello World dalam C, memaketkan pustaka ke APK, lalu mengirimkannya ke perangkat melalui USB
- Mulai mengeksplorasi resource game
- Awalnya menggunakan suara berformat ogg, tetapi muncul masalah; kemudian beralih ke format mp3 dan mengompresnya
- Mencoba menggunakan BASS untuk memutar suara, tetapi terlalu berat, sehingga mempelajari OpenSLES agar dapat membaca format MP3 tanpa masalah
- Menggunakan gambar png, menemukan upng yang lebih ringan daripada stb_image, dan menyelesaikan masalah decoding
- Rendering dengan OpenGL ES 2 + shader, memutar suara dengan OpenSLES, decoding png dengan upng, dan menggunakan Android Native Activity
Build:
- Unduh Visual Studio 2022
- Buka Visual Studio Installer
- Klik "Edit"
- Pilih pengembangan aplikasi klasik C++ dan pengembangan aplikasi mobile C++
- Unduh Android Studio (memerlukan apktool, sdk, ndk)
- Instal NDK 25.2.9519653 (versi yang lebih tinggi juga dapat digunakan)
- Pengaturan proyek disetel ke "Debug ARM", tetapi perlu mengubah path di build.bat
- Kompilasi dengan CTRL + B
Hak cipta:
- Tidak mengklaim hak cipta. Hak atas game dan resource dimiliki oleh DotGEARS
Inspirasi:
- rawdrawandroid
- Flapper
- Raylib
- ImGui
Ringkasan GN⁺:
- Proyek ini adalah upaya yang menantang untuk membuat game Flappy Bird untuk Android dalam bahasa C
- Berhasil mengimplementasikan game sambil mempertahankan ukuran APK di bawah 100 kilobyte
- Mengoptimalkan resource dengan berbagai teknologi seperti OpenGL ES 2, OpenSLES, dan upng
- Proyek ini memberikan wawasan bagi software engineer tentang pengembangan game kecil yang efisien
- Proyek serupa dengan fungsi sejenis antara lain Raylib dan rawdrawandroid
1 komentar
Komentar Hacker News
Andai ada filter "aplikasi di bawah 10MB" di app store
Berbagi pengalaman pernah menulis tinjauan literatur tentang mengapa orang memainkan Flappy Bird
Berbagi pengalaman menerbitkan proyek serupa dengan Nim pada 2020
Kodenya kurang dari 4k loc
Super Mario Bros berukuran 40KB
Mengira perlu Java glue code untuk membuat APK Android
Sangat keren melihat aplikasi Android di bawah 1MB
Rasanya seharusnya dinamai "Floppy Bird"
Menyegarkan dan menyenangkan melihat program/game/aplikasi yang "dibuat dengan penuh perhatian" alih-alih komponen pihak ketiga yang sudah membengkak
Penasaran apakah teknik menulis aplikasi C di Android menggunakan rawdrawandroid juga bisa dipakai oleh raylib (dan framework C lainnya)