Flappy Bird untuk Android, Ditulis dalam C, di Bawah 100KB
(github.com/VadimBoev)- Proyek ini bertujuan membuat klon Flappy Bird untuk Android dalam C sambil menekan ukuran APK menjadi di bawah 100KB
- Setelah mengenal rawdrawandroid pada 2021, pembuat proyek ingin membuat game dengan APK kecil, dan pada September 2024 melihat C# Flappy Bird di Raylib Discord yang memicu percobaan implementasi dalam C
- Implementasinya menggabungkan library native yang dibuat dengan C ke dalam APK, lalu memadukan OpenGL ES 2, shader, dan Android Native Activity
- Suara dikompresi dalam format MP3 dan diputar dengan OpenSLES, sementara decoding PNG menggunakan upng
- Build mendukung Visual Studio Code di Windows dan Makefile di Linux/macOS, serta menyatakan bahwa hak atas game dan resource dimiliki oleh DotGEARS
Tujuan dan latar belakang proyek
- Flappy Bird in C adalah proyek untuk menulis klon Flappy Bird yang berjalan di Android dalam C dan menjaga ukuran APK tetap di bawah 100KB
- Titik awalnya adalah rawdrawandroid yang dikenal pada 2021, dengan tujuan membuat game yang tetap mudah dipahami dan menarik sambil meminimalkan ukuran APK
- Flappy Bird sudah banyak di-port ke berbagai bahasa, jadi secara alami dipilih sebagai target implementasi klon
Percobaan sebelumnya dan masalahnya
- Pada 2021, pembuat proyek mempelajari Raylib, dan percobaan pertama membuat game dalam C++ dengan ImGui berakhir gagal
- Masalah saat itu ada beberapa
- Ukuran APK sekitar 1MB
- Game mengalami crash
- APK hanya menyertakan library armeabi-v7a
- Sesuai persyaratan Google tahun 2022, library arm64-v8a juga harus disertakan
Alasan mencoba lagi pada 2024
- Setelah melihat C# Flappy Bird di kanal Raylib Discord pada September 2024, pembuat proyek mulai mencoba mengimplementasikan Flappy Bird untuk Android dalam C dan membuat APK di bawah 100KB
- Targetnya terlihat tidak realistis, tetapi ketertarikan yang kompetitif menjadi pendorong implementasi
Cara implementasi
- Langkah awalnya adalah mengompilasi Hello World yang ditulis dalam C dan memaketkan library tersebut ke dalam APK
- Suara dikompresi dalam format MP3 dan diputar menggunakan OpenSLES
- Untuk decoding file PNG, dipilih upng
- Grafis dan integrasi Android menggunakan gabungan OpenGL ES 2, shader, dan Android Native Activity
Cara build
- Di Windows, lingkungan yang dijadikan acuan adalah Visual Studio Code
- Membuat
.envdari.env.example - Menjalankan
build.bat
- Membuat
- Di Linux dan macOS, build bisa dilakukan dengan Makefile yang disediakan
- Perlu memasang Android command-line tools
- Mengatur variabel lingkungan di file
.envpada root proyek - Jalankan
cd FlappyBirdlalumake
- Untuk prosedur build yang lebih rinci, pembaca diarahkan ke
BUILDING.md - APK yang sudah ditandatangani dibuat di
FlappyBird/app/build/outputs/apk/FlappyBird-signed.apk
Hak cipta dan proyek referensi
- Penulis proyek menyatakan tidak mengklaim hak cipta, dan bahwa hak atas game serta resource dimiliki oleh DotGEARS
- Proyek yang menjadi inspirasi adalah sebagai berikut
1 komentar
Pendapat Hacker News
Saya berharap app store punya filter hanya tampilkan aplikasi di bawah 10MB
Aplikasi yang paling cepat dan minim iklan serta mikrotransaksi biasanya adalah aplikasi kecil
Kemungkinan besar akan jauh lebih memuaskan mengunduh aplikasi termometer 3MB daripada aplikasi termometer 150MB
Semua aplikasi itu benar-benar kecil, sampai-sampai semuanya di bawah 200KB
Perekrut sering meminta hasil karya untuk ditunjukkan seperti portofolio seni, bahkan untuk aplikasi yang sudah tidak ada lagi atau server produksinya sudah mati
Kriteria yang lebih arbitrer lagi adalah mereka ingin memastikan apakah pernah mengerjakan aplikasi besar, dan kalau membuat paket 8–12MB dengan banyak teknik optimasi yang terlihat kompeten, itu dianggap sebagai sinyal bahwa aplikasi, layanan, dan basis penggunanya kecil
Padahal sekalipun ada ratusan juta unduhan dan pengguna, itu sama sekali tidak terkait dengan kriteria tersebut, dan di bidang ini insentif untuk membuat aplikasi bengkak sangat besar
Misalnya, saya harus mencari sampai 9 kali, termasuk yang berisi iklan, baru menemukan aplikasi termometer yang lebih dari 7MB
Saya bekerja di kedua platform selama beberapa tahun, tetapi tidak begitu tahu alasan pastinya. Dugaan saya, Android punya tradisi vector art yang jauh lebih kuat daripada bitmap, dan karena stabilitas ABI, library Swift selama beberapa tahun harus dikompilasi bersama aplikasi sampai akhirnya memakai dynamic linking di sisi sistem operasi
Saya berharap bisa memfilter aplikasi yang berbayar, tanpa iklan, dan terkadang juga tanpa pembelian dalam aplikasi
Sedikit menyimpang, tetapi dulu saya pernah menulis tinjauan literatur tentang mengapa orang memainkan Flappy Bird
Saat itu saya mahasiswa pascasarjana studi game, dan akhirnya tidak masuk dunia akademik, tetapi saya bagikan untuk hiburan
Untuk yang penasaran, ada di sini [1]
[1] http://www.fdg2015.org/papers/fdg2015_paper_60.pdf
Di satu sisi, gamenya sendiri sebenarnya tidak punya progres atau peningkatan kesulitan. Skor saat ini 0, 10, atau 100, tingkat kesulitannya tetap sama
Namun setiap rekor baru menjadi puncak baru yang harus dilewati pemain. Puncak pertama, dan mungkin yang paling menyebalkan, adalah mencetak 1 poin; untuk mencapai skor dua digit, pemain pada dasarnya harus menguasai kontrol inti, termasuk fisika dan timing yang presisi, serta belajar menangani berbagai situasi
Hambatan untuk mencapai tiga digit ke atas tampak hampir seperti diciptakan sendiri; rasa takut dan tegang saat mendekati rekor pribadi menjadi penghalang terbesar untuk memecahkan rekor
Begitu rekor itu terlewati, gemetar tangan saat mendekatinya lagi berikutnya seolah hilang secara ajaib, tetapi muncul kembali ketika mendekati rekor baru
Konsep gameplay dasarnya menipu karena sangat sederhana, tetapi bagi yang mau mengamatinya, ada banyak lapisan untuk diuraikan
https://www.foddy.net/Athletics.html
Kurang dari 4 ribu baris
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
Programnya memang tidak serumit itu, jadi jujur saja menurut saya 4 ribu baris juga terlalu banyak
Pada 2020 saya membuat sesuatu yang mirip dengan Nim dan merilisnya, meski grafisnya kurang cantik
Perbedaannya adalah saya masuk lebih dalam dan benar-benar menulis assembler untuk Dalvik bytecode dan file .apk
https://www.youtube.com/watch?v=wr9X5NCwPlI&list=PLxLdEZg8DR...
Sayangnya kode di repositori sudah rusak seiring waktu, dan sesekali saya berpikir untuk menghidupkannya kembali suatu hari nanti
Kadang ada aplikasi sederhana yang terlintas di kepala dan seandainya itu sedikit lebih dipoles, saya bisa membuatnya dengan mudah
Benar-benar keren
Senang melihat aplikasi Android di bawah 1MB berjalan di mana-mana, bahkan di HTC lama
Saya kira untuk membuat APK Android perlu kode penghubung Java, jadi senang melihat proyek ini
0 file Java itu keren
Proyek rawandroid yang disebut orang lain juga layak dilihat
https://github.com/cnlohr/rawdrawandroid/tree/master
Apa pun yang dilakukan, agar bisa berjalan diperlukan instance Activity, dan meski bisa dibuat juga di C, ada banyak kode boilerplate yang di Java sebagian besar ditangani lewat pewarisan
Di C murni caranya seperti ini: https://github.com/VadimBoev/FlappyBird/blob/master/FlappyBi... https://github.com/VadimBoev/FlappyBird/blob/master/FlappyBi...
Super Mario Bros ukurannya hanya 40KB
https://news.ycombinator.com/item?id=21213421
Kloning Flappy Bird ini berjalan di perangkat yang jumlahnya tak terhitung dengan konfigurasi hardware dan software yang bermacam-macam
Karena muat di disket floppy 3,5 inci, mereka melewatkan kesempatan menamainya Floppy Bird
Yang paling menonjol adalah versi reskin sederhana yang memakai ikon disket floppy sebagai pengganti burung
Tentu saja ‘angry birds’ jadi ‘ongry beards’
Apakah teknik membuat aplikasi C untuk Android dengan rawdrawandroid ini bisa diterapkan juga ke framework C lain seperti raylib?
Dan lewat Termux, bisakah sistem pengembangan ini dipakai untuk membuat lingkungan pengembangan C untuk Android di atas Android?
Saya punya skrip build yang agak belum rapi untuk proyek raylib saya
Tentu saja, penandatanganannya perlu ditangani lebih benar, Anda mungkin ingin membangun target selain aarch64, dan SDK Anda juga belum tentu terpasang di /home/denis
Selain itu, saya tidak yakin apakah cara menambahkan file .so ke apk ini adalah cara yang disukai Android modern, tetapi sejauh ini masih berfungsi
https://gist.github.com/deniska/f1ee73e18e1444eb724c01f933b6...
Kalau “untuk Android”, berarti bisa memakai Java, dan bytecode bisa sangat padat, jadi sepertinya masih bisa dibuat lebih kecil
Meski begitu, ini bukan untuk merendahkan proyek berbasis Android ini. Mereka juga tidak mengklaim membuat kloning Flappy Bird yang paling kecil
[0] https://laroldsjubilantjunkyard.itch.io/flappy-bird-gameboy/...
[1] https://laroldsjubilantjunkyard.itch.io/flappy-bird-gameboy
[2] https://www.youtube.com/watch?v=m839Vg_qXzM
Di kepala saya, semestinya bisa jauh lebih rendah, dan 10KB pun samar-samar terdengar realistis