Android के लिए Flappy Bird, C भाषा में लिखा गया, 100KB से कम
(github.com/VadimBoev)- इस प्रोजेक्ट का लक्ष्य Android के लिए Flappy Bird clone को C में इम्प्लीमेंट करते हुए APK का आकार 100KB से कम रखना है
- 2021 में rawdrawandroid देखने के बाद छोटे APK वाला गेम बनाने की कोशिश की गई, और 2024 के सितंबर में Raylib Discord पर C# Flappy Bird देखने से C इम्प्लीमेंटेशन की कोशिश की प्रेरणा मिली
- इम्प्लीमेंटेशन का तरीका C में बनी native library को APK में पैकेज करना है, और इसके लिए OpenGL ES 2, shaders, तथा Android Native Activity को मिलाकर इस्तेमाल किया गया है
- साउंड को MP3 में compress किया गया है और OpenSLES से चलाया जाता है, जबकि PNG decoding के लिए upng का उपयोग किया गया है
- build के लिए Windows पर Visual Studio Code और Linux/macOS पर Makefile का समर्थन है, और यह भी स्पष्ट किया गया है कि गेम और resources के अधिकार DotGEARS के पास हैं
प्रोजेक्ट का लक्ष्य और पृष्ठभूमि
- Flappy Bird in C एक ऐसा प्रोजेक्ट है जिसका उद्देश्य Android पर चलने वाला Flappy Bird clone को C में लिखना और APK का आकार 100KB से कम रखना है
- इसकी शुरुआत 2021 में देखे गए rawdrawandroid से हुई थी, और लक्ष्य ऐसा गेम बनाना था जो APK आकार को न्यूनतम रखे, फिर भी समझने योग्य और दिलचस्प हो
- Flappy Bird को पहले ही कई भाषाओं में port किया जा चुका है, इसलिए clone इम्प्लीमेंटेशन के लिए इसे स्वाभाविक रूप से चुना गया
पिछली कोशिश और समस्याएँ
- 2021 में Raylib सीखा गया, और ImGui का उपयोग करके C++ में गेम बनाने की पहली कोशिश असफल रही
- उस समय कई समस्याएँ थीं
- APK का आकार लगभग 1MB था
- गेम crash हो रहा था
- APK में केवल armeabi-v7a library शामिल थी
- Google की 2022 requirements के अनुसार arm64-v8a library शामिल करना जरूरी था
2024 में दोबारा कोशिश की वजह
- 2024 के सितंबर में Raylib Discord channel पर C# Flappy Bird देखने के बाद, Android के लिए Flappy Bird को C में इम्प्लीमेंट करने और APK को 100KB से कम रखने की कोशिश शुरू की गई
- लक्ष्य अवास्तविक लग रहा था, लेकिन प्रतिस्पर्धी रुचि ही इम्प्लीमेंटेशन की प्रेरणा बनी
इम्प्लीमेंटेशन का तरीका
- शुरुआत C में लिखे गए Hello World को compile करने और उस library को APK के रूप में पैकेज करने से हुई
- साउंड को MP3 format में compress किया गया और OpenSLES का उपयोग करके चलाया गया
- PNG files की decoding के लिए upng को चुना गया
- graphics और Android integration के लिए OpenGL ES 2, shaders, और Android Native Activity का साथ में उपयोग किया गया
build करने का तरीका
- Windows में Visual Studio Code environment को आधार माना गया है
.env.exampleसे.envबनाया जाता हैbuild.batचलाया जाता है
- Linux और macOS में दिए गए Makefile से build किया जा सकता है
- Android command-line tools install करना जरूरी है
- प्रोजेक्ट root की
.envfile में environment variables सेट करने होते हैं cd FlappyBirdके बादmakeचलाया जाता है
- अधिक विस्तृत build प्रक्रिया के लिए
BUILDING.mdदेखने को कहा गया है - signed APK
FlappyBird/app/build/outputs/apk/FlappyBird-signed.apkपर बनती है
कॉपीराइट और संदर्भ प्रोजेक्ट
- प्रोजेक्ट के लेखक ने किसी कॉपीराइट का दावा नहीं किया है, और यह स्पष्ट किया है कि गेम और resources के अधिकार DotGEARS के पास हैं
- प्रेरणा देने वाले प्रोजेक्ट ये हैं
1 टिप्पणियां
Hacker News की राय
काश App Store में सिर्फ 10MB से छोटे ऐप दिखाएं वाला filter होता
सबसे तेज़ और कम विज्ञापन/माइक्रोपेमेंट वाले ऐप आमतौर पर छोटे ऐप होते हैं
150MB वाले thermometer ऐप की बजाय 3MB वाला thermometer ऐप डाउनलोड करने पर संतुष्ट होने की संभावना कहीं ज़्यादा होती है
वे ऐप सचमुच इतने छोटे थे कि सभी 200KB से कम थे
recruiters अक्सर उन ऐप्स के लिए भी, जो अब मौजूद नहीं थे या जिनके production servers बंद हो चुके थे, दिखाने लायक result मांगते थे, जैसे कोई art portfolio हो
इससे भी ज़्यादा मनमाना criterion यह देखना था कि क्या आपने कोई बड़ा ऐप किया है; और अगर आप सक्षम दिखने वाली कई optimization techniques लगाकर 8–12MB package बनाते, तो इसे ऐप/सेवा/user base छोटा होने का संकेत समझ लिया जाता
असल में भले ही करोड़ों downloads और users हों, उसका उस criterion से कोई लेना-देना नहीं था, और इस field में फूले हुए ऐप बनाने के लिए बहुत बड़ा incentive है
उदाहरण के लिए, ads सहित 7MB से बड़ा thermometer ऐप खोजने के लिए मुझे 9 बार देखना पड़ा
मैंने दोनों platforms पर कई साल काम किया है, पर सही वजह नहीं जानता; अंदाज़ा लगाऊं तो Android में bitmaps की तुलना में vector art की परंपरा कहीं मज़बूत है, और Swift libraries को ABI stability के कारण OS-side dynamic linking इस्तेमाल होने से पहले कई सालों तक ऐप में साथ compile करना पड़ता था
काश paid, बिना ads वाले, और कभी-कभी in-app purchases भी न रखने वाले ऐप्स पर filter किया जा सकता
थोड़ा विषयांतर है, लेकिन पहले मैंने इस पर एक literature review लिखा था कि लोग Flappy Bird क्यों खेलते हैं
उस समय मैं game studies का grad student था, और आखिरकार academia में नहीं गया, लेकिन मज़े के लिए share कर रहा हूं
जिसे उत्सुकता हो, उसके लिए यह यहां है [1]
[1] http://www.fdg2015.org/papers/fdg2015_paper_60.pdf
एक तरफ़, game में अपने-आप कोई वास्तविक progression या difficulty increase नहीं है। आपका current score 0 हो, 10 हो या 100, difficulty वही रहती है
लेकिन हर नया high score player के पार करने के लिए एक नई चोटी बन जाता है। पहली और शायद सबसे चिढ़ाने वाली चोटी 1 point हासिल करना है, और double-digit score तक पहुंचने के लिए exact physics और timing सहित core controls को बुनियादी तौर पर master करना और कई situations handle करना सीखना पड़ता है
triple digits या उससे ऊपर जाने की बाधाएं लगभग self-created लगती हैं, और अपने high score के पास पहुंचने पर होने वाला डर और tension high score तोड़ने की सबसे बड़ी बाधा है
एक बार आप उस high score को पार कर लें, तो अगली बार वहां पहुंचने पर हाथ कांपना जादू की तरह गायब हो जाता है, लेकिन नए high score के पास पहुंचते ही फिर लौट आता है
basic gameplay concept धोखा देने लायक simple है, लेकिन जो इसमें झांकना चाहे उसके लिए खोलने को कई layers हैं
https://www.foddy.net/Athletics.html
यह 4 हज़ार lines से कम है
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
यह इतना complex program नहीं है, इसलिए ईमानदारी से कहूं तो 4 हज़ार lines भी बहुत ज़्यादा लगती हैं
2020 में मैंने Nim में कुछ ऐसा ही बनाया और release किया था, हालांकि graphics उतने सुंदर नहीं थे
फर्क यह था कि मैं और गहराई में गया और सचमुच Dalvik bytecode और .apk files के लिए assembler तक लिखा
https://www.youtube.com/watch?v=wr9X5NCwPlI&list=PLxLdEZg8DR...
repository का code दुर्भाग्य से समय के साथ टूट गया है, और कभी-कभी सोचता हूं कि किसी दिन इसे फिर जीवित करूं
कभी-कभी कोई ऐसा app idea आता है जिसे थोड़ी और polish होती तो आसानी से बना सकता था
सचमुच शानदार
1MB से छोटा Android ऐप पुराने HTC पर भी हर जगह चलते देखना अच्छा है
Android APK बनाने के लिए Java glue code चाहिए होगा, ऐसा सोचा था, लेकिन यह प्रोजेक्ट देखकर अच्छा लगा
0 Java files होना शानदार है
दूसरों ने जिस rawandroid प्रोजेक्ट का जिक्र किया है, वह भी देखने लायक है
https://github.com/cnlohr/rawdrawandroid/tree/master
कुछ भी करने के लिए चलाने हेतु Activity instance चाहिए, और C में भी इसे बनाया जा सकता है, लेकिन Java में inheritance से ज्यादातर संभल जाने वाला काफी boilerplate code चाहिए होता है
pure C में यह ऐसे किया जाता है: https://github.com/VadimBoev/FlappyBird/blob/master/FlappyBi... https://github.com/VadimBoev/FlappyBird/blob/master/FlappyBi...
Super Mario Bros सिर्फ 40KB का था
https://news.ycombinator.com/item?id=21213421
यह Flappy Bird clone अलग-अलग hardware और software configuration वाले अनगिनत devices पर चलता है
3.5-inch floppy disk में फिट हो जाता है, इसलिए इसे Floppy Bird नाम देने का मौका चूक गए
सबसे ज्यादा दिखने वाला एक साधारण skin-change version है, जिसमें bird की जगह floppy disk icon इस्तेमाल होता है
जाहिर है, ‘angry birds’ को ‘ongry beards’ कहा जाता है
rawdrawandroid से Android के लिए C applications बनाने की यह technique क्या raylib जैसे दूसरे C frameworks पर भी लागू हो सकती है?
और Termux के जरिए इस development system का इस्तेमाल करके, Android पर ही Android के लिए C development environment बनाया जा सकता है?
मेरे raylib project में इस्तेमाल होने वाली थोड़ी अधूरी build script है
जाहिर है signing को बेहतर तरीके से संभालना होगा, aarch64 के अलावा दूसरे targets भी build करना चाह सकते हैं, और SDK शायद /home/denis में installed न हो
साथ ही .so file को apk में जोड़ने का तरीका modern Android की preferred way है या नहीं, यह पक्का नहीं है, लेकिन अभी भी काम करता है
https://gist.github.com/deniska/f1ee73e18e1444eb724c01f933b6...
“Android के लिए” का मतलब है कि Java इस्तेमाल किया जा सकता है, और bytecode बहुत dense हो सकता है, इसलिए शायद इसे और छोटा बनाया जा सकता है
इससे इस Android-based project को कमतर बताने का इरादा नहीं है। वैसे भी यह सबसे छोटा Flappy Bird clone बनाने का दावा नहीं कर रहा
[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
मन में लगता है कि इसे इससे काफी कम तक जाना चाहिए, और 10KB भी धुंधला-सा realistic लगता है