4 पॉइंट द्वारा GN⁺ 2024-09-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2024-09-23
Hacker News की राय
  • काश app store में "10MB से छोटे apps" का फ़िल्टर होता

    • छोटे apps ज़्यादा तेज़ होते हैं और उनमें ads या micro-payments कम होते हैं
    • 3MB का thermometer app, 150MB के thermometer app से ज़्यादा संतोषजनक लगता है
  • इस बारे में literature review लिखने का अनुभव साझा किया कि लोग Flappy Bird क्यों खेलते हैं

  • Nim में 2020 में ऐसा ही एक project प्रकाशित करने का अनुभव साझा किया

  • code 4k loc से कम है

    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 सिर्फ 40KB था

  • लगता था कि Android APK बनाने के लिए Java glueing ज़रूरी होगा

  • 1MB से छोटे Android apps देखना सच में शानदार है

    • पुराने HTC पर भी चल सकता है
    • बधाई
  • अगर इसका नाम "Floppy Bird" रखा होता तो अच्छा रहता

    • यह 3.5-inch floppy disk में फ़िट हो सकता है
  • मौजूदा फूले हुए third-party components की जगह "ध्यान से बनाए गए" program/game/app को देखना ताज़गीभरा और अच्छा लगता है

  • सोच रहा/रही हूँ कि rawdrawandroid का इस्तेमाल करके Android पर C applications लिखने की यह तकनीक raylib (और दूसरे C frameworks) के साथ भी काम कर सकती है या नहीं

    • यह भी जिज्ञासा है कि क्या Termux के ज़रिए Android पर Android के लिए C development environment इस्तेमाल किया जा सकता है