- Flappy Bird, केवल C, Java/Kotlin के बिना, APK आकार (armeabi-v7a + arm64-v8a) < 100 kilobytes
इतिहास:
- 2021 में rawdrawandroid repository मिली
- जितना संभव हो उतने छोटे APK आकार वाला एक simple game बनाना चाहा
- Flappy Bird गेम का एक clone बनाने का फैसला किया
- पहली कोशिश C++ और ImGui का उपयोग करके की, लेकिन असफल रही
- APK आकार लगभग 1 megabyte था
- गेम के crash होने की संभावना थी
- APK में केवल armeabi-v7a library शामिल थी
- project structure जटिल था और व्यवस्थित नहीं था
प्रेरणा:
- 14 सितंबर 2024 को Raylib Discord channel में C# में Flappy Bird बनाने वाले किसी व्यक्ति को देखा
- C भाषा में Android के लिए 100 kilobytes से कम APK आकार बनाने के विचार को चुनौती के रूप में लेना चाहा
- आज के समय में, जब APK आकार 500 megabytes तक पहुँच जाते हैं, इसे 100 kilobytes से नीचे रखना बहुत कठिन है
- आखिरकार सफल हुआ, लेकिन यह आसान नहीं था
कार्यान्वयन:
- शुरुआत में C में Hello World compile किया, library को APK में package किया, और USB के जरिए device पर भेजा
- गेम के resources को खंगालना शुरू किया
- शुरू में ogg format की sound इस्तेमाल की, लेकिन समस्या आई; बाद में mp3 format में बदलकर compress किया
- sound चलाने के लिए BASS का उपयोग करना चाहा, लेकिन वह भारी था, इसलिए OpenSLES सीखा ताकि MP3 format को बिना समस्या पढ़ा जा सके
- png images का उपयोग किया, और stb_image से हल्का upng ढूँढकर decoding समस्या हल की
- rendering के लिए OpenGL ES 2 + shader, sound playback के लिए OpenSLES, png decoding के लिए upng, और Android Native Activity का उपयोग किया
बिल्ड:
- Visual Studio 2022 डाउनलोड करें
- Visual Studio Installer खोलें
- "Edit" पर क्लिक करें
- C++ classic application development, C++ mobile application development विकल्प चुनें
- Android Studio डाउनलोड करें (apktool, sdk, ndk आवश्यक)
- NDK 25.2.9519653 install करें (ऊपर के version भी उपयोग किए जा सकते हैं)
- project setting "Debug ARM" पर है, लेकिन build.bat में path बदलना होगा
- CTRL + B से compile करें
कॉपीराइट:
- कोई copyright दावा नहीं किया जाता। गेम और resources के अधिकार DotGEARS के पास हैं
प्रेरणा स्रोत:
- rawdrawandroid
- Flapper
- Raylib
- ImGui
GN⁺ की संक्षिप्त टिप्पणी:
- यह project C भाषा में Android के लिए Flappy Bird गेम बनाने का एक चुनौतीपूर्ण प्रयास है
- APK आकार को 100 kilobytes से कम रखते हुए भी गेम को implement करने में सफलता मिली
- resources को optimize करने के लिए OpenGL ES 2, OpenSLES, upng जैसी कई तकनीकों का उपयोग किया गया
- यह project software engineers को छोटे आकार वाले efficient game development के बारे में insight देता है
- समान कार्यक्षमता वाले projects में Raylib और rawdrawandroid शामिल हैं
1 टिप्पणियां
Hacker News की राय
काश app store में "10MB से छोटे apps" का फ़िल्टर होता
इस बारे में literature review लिखने का अनुभव साझा किया कि लोग Flappy Bird क्यों खेलते हैं
Nim में 2020 में ऐसा ही एक project प्रकाशित करने का अनुभव साझा किया
code 4k loc से कम है
Super Mario Bros सिर्फ 40KB था
लगता था कि Android APK बनाने के लिए Java glueing ज़रूरी होगा
1MB से छोटे Android apps देखना सच में शानदार है
अगर इसका नाम "Floppy Bird" रखा होता तो अच्छा रहता
मौजूदा फूले हुए third-party components की जगह "ध्यान से बनाए गए" program/game/app को देखना ताज़गीभरा और अच्छा लगता है
सोच रहा/रही हूँ कि rawdrawandroid का इस्तेमाल करके Android पर C applications लिखने की यह तकनीक raylib (और दूसरे C frameworks) के साथ भी काम कर सकती है या नहीं