آشنایی با مزیت‌های توسعهٔ اپ‌های اندروید با ++C نسبت به Java

آشنایی با مزیت‌های توسعهٔ اپ‌های اندروید با ++C نسبت به Java

با وجود اینکه اپل از زبان برنامه‌نویسی Swift برای آی‌او‌اس و گوگل از زبان‌های Java و Kotlin برای اندروید پشتیبانی می‌کنند، اما همواره دولوپرها این امکان را داشته و خواهند داشت تا با استفاده از دیگر زبان‌های برنامه‌نویسی نیز به توسعهٔ اپ موبایل بپردازند که آن میان می‌توان به #C و JavaScript اشاره کرد. یکی دیگر از این زبان‌ها ++C و NDK برای توسعهٔ اپ‌های اندرویدی است. بدین ترتیب، دولوپرها می‌توانند از زبان‌های C و ++C در توسعهٔ اپلیکیشن‌های اندرویدی خود استفاده کنند. اما سؤالی که مطرح می‌شود این است مزیت‌های استفاده از ++C برای توسعهٔ اپ‌های اندرویدی چیست؟

کدنویسی سریع‌تر 
قبل از اینکه در سال ۲۰۱۷ زبان Kotlin توسط گوگل مورد حمایت قرار گیرد، زبان جاوا در حوزهٔ توسعهٔ اپ‌های اندرویدی یکه‌تازی می‌کرد، اما در زمینه‌هایی مانند بازی‌سازی، شبیه‌سازی فیزیکی و پردازش سیگنال زبانی همچون ++C می‌تواند سریع‌تر و کارآمدتر از جاوا باشد (البته تمام این کارها را با استفاده از فریمورک Java Native Interface یا به اختصار JNI می‌توانید با دسترسی محدودتری انجام دهید، اما سرعت‌تان کاهش پیدا می‌کند).

ویژوال استودیو و اندروید استودیو
IDEهایی که برای توسعهٔ اندروید می‌توان استفاده کرد زیاد هستند که یکی از مهم‌ترین آنها، اندروید استودیو است که اتفاقاً از NDK هم پشتیبانی می‌کند. مایکروسافت هم نسخهٔ رایگان Visual Studio Express را در سال 2005 عرضه کرد که در سال 2013 هم با ویرایش Community تکمیل شد. این نسخه امکان افزودن پلاگین‌ها و مدیریت آنها را از طریق Nuget Package Manager فراهم می‌کند.

ویژوال استودیو یک امولاتور اندروید سریع در کنار کیت‌های توسعهٔ اندروید (SDK و NDK) دارد؛ بنابراین شما برای استفاده از ابزارهای خارجی نیازی به استفاده از پلتفرم دیگری ندارید. 

امکان استفاده از سورس‌کد بازی‌های موجود 
تعداد زیادی از سورس‌کد بازی‌ها من‌جمله موتورهای بازی اپن‌سورس وجود دارند که برای شروع می‌توانید فهرست موجود بازی‌های اپن‌سورس در ویکیپدیا را بررسی کنید. البته همهٔ بازی‌ها با ++C نوشته نشده‌اند اما ابزارهای موجود، فرصت ادغام و ترکیب کدها را برای دولوپرها فراهم می‌کنند.

مزیت‌های ++C نسبت به Java 
جاوا زبان بی‌نقصی است اما برای توسعهٔ اپلیکیشن‌های اندروید، ++C برتری‌هایی نسبت به جاوا دارا است که یکی از این مزیت‌ها میزان استفاده از حافظهٔ کمتر است. ++C به نوعی فرزند زبان C محسوب می‌شود و نیازی هم به توضیح نیست که C زبانی است که در سرعت اجرا شهرهٔ خاص و عام است (برای آشنایی بیشتر با این زبان، به مقالهٔ آیا می‌دانید اگر زبان برنامه‌نویسی C نبود، چه بلایی سر دنیای نرم‌‌افزار می‌آمد! مراجعه نمایید).

اغلب ادعا می‌شود که برنامه‌های Java با سرعت ++C یا در بعضی موارد حتی سریع‌تر اجرا می‌شوند. سورس‌کد جاوا به صورت بایت‌کد کامپایل شده و با فرمت فشردهٔ jar. ذخیره می‌شود. در هنگام اجرا، JVM بایت‌کد فایل jar. را بارگذاری کرده و آن را به زبان ماشین کامپایل می‌کند (این ویژگی کامپایل Just In Time یا به اختصار JIT (در لحظه) نام دارد).

در مقابل، ++C زمان اصطلاحاً Warm-up ندارد و به همین دلیل اپلیکیشن‌های نوشته شده در ++C در سخت‌افزار یکسان نسبت به اپلیکیشن‌های جاوا سریع‌تر هستند. به طور مثال، بلوک کد زیر مربوط به NDK برای NativeActivity برای فناوری OpenGL است و به منزلهٔ اولین بخشی است که اکتیویتی را استارت می‌کند:

void android_main(struct android_app* state) {
    struct engine engine;

    // Make sure glue isn't stripped.
    app_dummy();

    memset(&engine, 0, sizeof(engine));
    state->userData = &engine;
    state->onAppCmd = engine_handle_cmd;
    state->onInputEvent = engine_handle_input;
    engine.app = state;

    // Prepare to monitor accelerometer
    engine.sensorManager = ASensorManager_getInstance();
    engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
            ASENSOR_TYPE_ACCELEROMETER);
    engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager,
            state->looper, LOOPER_ID_USER, NULL, NULL);

    if (state->savedState != NULL) {
        // We are starting with a previous saved state; restore from it.
        engine.state = *(struct saved_state*)state->savedState;
    }

آیا پیش از این از ++C برای توسعهٔ اندروید استفاده شده است؟ 
در ابتدا که Google Android NDK وجود داشت، گوگل اعلام کرد که گرچه این کیت توسعه برای بسیاری از اپلیکیشن‌ها کاربرد ندارد اما برای اپلیکیشن‌های به اصطلاح CPU Intensive مانند موتورهای بازی که فشار زیادی روی سی‌پی‌یو می‌آورند می‌تواند مفید باشد. سپس Google Labs در سال 2014، لایبرری fplutil را منتشر کرد که این مجموعه ابزارها برای توسعهٔ اپلیکیشن‌ها با زبان‌های C و ++C برای اندروید مفید بود.

نتیجه‌گیری 
اگر شما یک توسعه‌دهندهٔ حرفه‌ای و مجرب زبان برنامه نویسی ++C هستید و تصمیم دارید وارد دنیای توسعهٔ اندروید شوید، خواهید توانست علاوه بر زبان‌های جاوا و کاتلین، با این زبان هم برای سیستم‌عامل محبوب اندروید کدنویسی کنید.

حال نوبت به نظرات شما می‌رسد. آیا با استفاده از NDK اقدام به توسعهٔ اپ‌های اندرویدی کرده‌اید. اگر این زمینه تجربه‌ای دارید، نظرات و دیدگاه‌های خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع