آشنایی با زبان‌هایی به غیر از جاوا برای اپ‌نویسی اندروید

آشنایی با زبان‌هایی به غیر از جاوا برای اپ‌نویسی اندروید

سیستم‌عامل اندروید در حال سپری کردن دوران گذار جالب توجهی است؛ گوگل در حال ساخت نسخه‌ای پریمیوم از این سیستم‌عامل برای پلتفرم موبایل است و کارشناسان زیادی معتقدند که در آینده‌ای نه چندان دور، این سیستم‌عامل دستخوش تغییرات فراوانی -از نام آن گرفته تا حتی شکل و شمایلش- خواهد شد. از آنجایی که آینده این سیستم‌عامل هنوز نامشخص است، بنابراین زبانی که برنامه‌نویسان از آن استفاده می‌کنند. به طور معمول برنامه‌نویسان از زبان جاوا برای نوشتن برنامه‌های‌شان استفاده می‌کنند، زبانی با قدمت زیاد و یک اکوسیستم شناخته شده، اما همیشه برنامه‌نویسانی که از این زبان برای نوشتن برنامه‌هایشان استفاده می‌کردند از این‌که نمی‌توان از آخرین بروزرسانی‌ها و جدیدترین ویژگی‌ها استفاده کنند، احساس کمبود می‌کردند، بخصوص برنامه‌نویسانی که در گذشته با زبان‌های دیگری برنامه‌نویسی کرده بودند. در این مقاله قصد داریم نشان دهیم که چگونه می‌توان از زبان‌های دیگر به عنوان جایگزین زبان جاوا برای اپ‌نویسی اندروید استفاده کرد. از جمله ویژگی‌هایی که زبان‌های دیگر دارند این است که برنامه‌نویسان آن‌ها می‌توانند برای سایر پلتفرم‌های موبایل نیز برنامه‌نویسی نمایند. با سکان آکادمی همراه باشید.

مجاز به استفاده از Webview نیستید
یک راه حل برای برنامه‌نویسان این است که از تکنیک‌های مختلفی برای تبدیل کد‌های جاوااسکریپت، اچ‌تی‌ام‌ال و سی‌اس‌اس به یک شبهِ برنامه استفاده کنند. در این مطلب نمی‌خواهیم هیچ کدام از این گزینه‌های برنامه‌نویسی هیبریدی که شامل React Native ،Cordova یا NativeScript می‌شوند را بررسی کرده و آتش جنگ مقایسه بین دو تکنیک برنامه‌نویسی نیتیو و هیبریدی را نیز شعله‌ور کنیم، بلکه در این مقاله قصد داریم تا زبان‌هایی را مورد بررسی قرار دهیم که امکان استفاده از آن‌ها بعنوان روشی نیتیو در این پلتفرم وجود دارد.

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

NDK که مخفف Native Development Kit است، راهکار خلاص شدن از این محدودیت است به طوری که با استفاده از این کیت، برنامه‌نویس از امکان استفاده از ویژگی‌های سخت‌افزاری مشخصی برخوردار خواهد شد. این ویژگی برای برنامه‌نویسانی در نظر گرفته شده است که می‌خواهند از لایبرری‌هایی استفاده کنند که برای C یا ++C نوشته شده‌اند (البته با استفاده از این کیت، برنامه‌نویس می‌تواند از زبان‌های برنامه‌نویسی دیگر نیز برای پلفترم اندروید استفاده کند به طوری که وجود این قابلیت، باعث شده است که برنامه‌نویسان بیشتری بتوانند برای اندروید اپ بنویسند.)

برای استفاده از APIها و لایبرری‌های اندروید، معمولا برنامه‌نویسان باید کد C یا ++C خود را با استفاده از کدی که اصطلاحا Wrapper نامیده‌ می‌شود، به کد اصلی به اصطلاح Bind کرده و توابع موجود در لایبرری خود را با استفاده از این واسط مورد استفاده قرار دهند. البته آن‌قدرها هم که به نظر می‌رسد استفاده از آن مشکل نیست بلکه چند خط کد جاوای ساده، این ارتباط را برقرار می‌کند.

در گذشته بهتر بود که از NDK در کد استفاده نشود، اما اخیراً با توجه به بهبود‌های حاصل شده، بهتر است که از این ویژگی برای افزایش سرعت استفاده شود. در بعضی از موارد مانند بازی‌ها حتی بهتر است از NDK استفاده شود چرا که نسبت به جاوا، به مراتب سریع‌تر است (البته استفاده از NDK هم همچون هر چیز دیگری در دنیای برنامه‌نویسی، با چالش‌های خاص خود روبرو است!)

C++, C در مقابل C
همان‌طور که ممکن است حدس زده باشید، اگر بخواهید کد C یا ++C برای اندروید بنویسید، Android Studio از آن پشتیبانی می‌کند البته با بهره‌گیری از ابزاری که نخستین بار برای Clion نوشته شده بود (CLion یک IDE کراس‌پلتفرم برای زبان‌های سی‌ و سی‌پلاس‌پلاس است که توسط شرکت JetBrains که خالق هسته‌ٔ اصلی اندروید استودیو نیز هست توسعه داده شده است.)

Xamarin
زامارین که در بدو امر Mono نامیده می‌شد و در حال حاضر تحت این عنوان شرکت مایکروسافت مالک آن است، امکان برنامه‌نویسی با زبان #C برای برنامه‌نویسی تحت چندین پلتفرم را فراهم می‌کند، که اندروید هم یکی از آنها است، البته این در حالی است که از NDK برای کامپایل کردن کدهای #C استفاده می‌کند، ولی به شما امکان استفاده از ای‌پی‌آی‌ها و کامپوننت‌های نیتیو را نیز می‌دهد.

نکته‌ای که در ارتباط با پلتفرم زامارین وجود دارد این است که مدل کسب درآمد آن کمی پیچیده است و بدین صورت است که Xamarin بخشی از IDE شرکت مایکروسافت یعنی Visual Studio است به گونه‌ای که شما برای پشتیبانی هزینه پرداخت می‌کنید وگرنه خود IDE آن رایگان است. اگر شما یک برنامه‌نویس #C هستید، این یک امکان فوق‌العاده برای شما است که بتوانید با #C برای اندروید اپ بنویسید.

Kotlin
Kotlin نیز یک پیشنهاد جذاب است؛ یکی از زبان‌های در دسترس برای توسعه برنامه‌های اندرویدی و اگر بهتر بخواهیم آن را توصیف کنیم جایگزینی برای زبان جاوا. این زبان به دست تیم JetBrains -تیمی که توسعه‌دهنده Android Studio است- ساخته شده که قابلیت تفسیر شدن به کد جاوا را دارد؛ این جمله بدان معنا است که امکان استفاده از لایبرری‌های اصلی اندروید در آن وجود دارد.

 با این زبان به خوبی می‌توان در اندروید استودیو کدنویسی کرد و سینتکس آن برای برنامه‌نویسان جاوا آشنا به‌نظر می‌رسد، البته این در حالی است که ویژگی‌های زبان‌های مدرن را نیز شامل می‌شود. همچنین شما می‌توانید کد آن را به کد جاوااسکریپت کامپایل نمایید، که ویژگی خوبی برای افرادی است که می‌خواهند اپلیکیشن‌های مالتی‌پلتفرم بسازند.

Go Lang
Go یک زبان نسبتاً جدید است که در سال 2009 در گوگل متولد شده است، افراد زیادی پیش‌بینی کرده‌اند که این زبان ممکن است زبان بعدی برای توسعه اپلیکیشن‌های اندرویدی باشد. این زبان ویژگی‌های محبوبی از سایر زبان‌ها همچون امکان اجرای چندین نمونه از یک اپلیکیشن به صورت همزمان را دارا می‌باشد. برنامه کامپایل شده این زبان سریع است و امکانات زیادی از زبان‌های قدیمی‌تر در این زبان موجود‌ند. این مجموعه امکانات باعث شده است که این زبان برای توسعه اپلیکیشن‌هایی همچون Docker محبوب واقع شود. البته این مورد زمانی هیجان‌انگیزتر می‌شود که بتوان از این ویژگی‌ها در توسعه اپلیکیشن‌های موبایل هم استفاده کرد (برای آشنایی بیشتر با Docker، به مقالهٔ آشنایی با Docker، پلتفرمی برای ساخت و اجرای اپلیکیشن های توزیع شده مراجعه نمایید.)

 به هر حال، در حال حاضر پکیج‌هایی وجود دارند که از Android و iOS پشتیبانی می‌کنند، که البته استفاده از آن‌ها برای اجرای سرویس‌های بک‌اند برای تولید اینترفیس اپلیکیشن کار چندان مشکلی نیست. برای انجام این کار، نخست زبان GoLang را نصب نمایید. سپس GoMobile Tools را تنظیم نمایید. بعد از انجام این کار می‌توانید انتخاب کنید که یک اپلیکیشن ایزوله ایجاد نمایید یا این‌که کد نوشته شده به زبان Go خود را به کد‌های جاوا به اصطلاح Bind کنید.

برای انجام این کار این نکته را مد نظر داشته باشید که آموزش‌هایی که در وب وجود دارند را با دقت و مرحله‌به‌مرحله به‌پیش ببرید تا مشکلی برای شما پیش نیاید. زبان Go نیازمند ارتباطات و ابزارهای مختلفی است که بایستی به درستی بر روی کامپیوتر شما کانفیگ شوند تا بتوانید با آن‌ها کار کنید.

Dart.js
اجازه ندهید این نام جذاب شما را فریب دهد، این زبان شامل بعضی از ویژگی‌های موجود در جاوااسکریپت است؛ این زبان به نوعی یک زبان کامپایلی به‌حساب می‌آید که کد نوشته شده برای آن بر روی Virtual Machine (ماشین مجازی) مخصوص این زبان اجرا می‌شود، درست شبیه زبان جاوا.

Dart یکی از اختراعات اخیر گوگل است (2011)، که پس از مدتی جلب توجه کردن، به عنوان جایگزینی برای زبان جاوا مطرح شد. این زبان افرادی که پیشینه‌ای از جاوااسکریپت داشتند را جذب می‌کند، تا به زبانی کوچ کنند که یک زبان C-style است و شامل ویژگی‌های هر دو زبان -جاوا و جاوااسکریپت- است.

برای برنامه‌نویسی موبایل، مجموعه‌ای از ابزار‌ها و افزونه‌ها برای این زبان وجود دارند که Flutter نام دارد. Flutter از ویجت‌ها و کامپوننت‌های نیتیو یا حتی WebView استفاده نمی‌کند؛ در عوض این زبان از متد خاص خود برای رندر نمودن ویژگی‌های صفحه استفاده می‌کند و کد شما را اجرا می‌کند. این مسئله منجر به این خواهد شد که پیچیدگی‌هایی به سورس‌کد پروژه -نه خود زبان- افزوده شود (Flutter با این هدف پیش آمده است که کار‌ها را تا حد امکان ساده کند. علاوه بر این، پلاگین‌هایی همراه با‌ این ابزار برای نرم‌افزارهای Atom و Intellij آمده است.) 

Swift
شرکت اپل که به نوآوری معروف است، در حوزه‌ٔ زبان‌های برنامه‌نویسی هم دست از خلاقیت نکشیده و جایگزینی برحق تحت عنوان Swift به جای Objective-C ابداع کرده است که از بدو ورود به صنعت تاکنون، از رشد فزاینده‌ای برخوردار بوده است و در حال حاضر زبان منتخب برای بسیاری از برنامه‌نویسان iOS است؛ اما این مسئله چه ربطی به برنامه‌نویسان اندروید دارد؟ این زبان در ماه دسامبر 2015 به جامعهٔ اپن‌سورس پیوست و امکان استفاده از آن در لینوکس نیز فراهم شد!

استقبال از این زبان برنامه‌نویسی تازه‌وارد همچنین داکیومنت‌های موجود برای پروژهٔ Swift باعث شد تا پاسخ به سوال فوق، از بالقوه به بالفعل تبدیل شود. داکیومنتی در ریپازیتوری‌های سوئیفت وجود دارد که به برنامه‌نویسان کمک می‌کند تا بتوانند با استفاده از NDK، سورس‌کد سوئیفت را به بایت‌کد (برای کدهای جاوا نوعی کامپایل شدن است) تبدیل کند تا سیستم عامل اندروید بتواند آن را اجرا کند. اگر داکیومنت موجود را بخوانید، متوجه می‌شوید که در مواقعی پروسه تنظیم کردن بسیار پیچیده می‌شود که با توجه به تغییراتی که گوگل دائماً بر روی NDK اعمال می‌کند، انجام این کار را با مشکل مواجه می‌کند. حتی اگر شما این پروسه طولانی و پیچیده را با موفقیت طی کنید متوجه می‌شوید که این زبان نمی‌تواند با هیچ‌کدام از لایبرری‌های اندروید ارتباط برقرار کند (البته هنوز چنین امکانی فراهم نشده است و به نظر می‌رسد که در آینده‌ای نه‌چندان دور، این مشکل مرتفع گردد.)

علیرغم این فرایند کدنویسی نسبتا دشوار با زبان سوئیفت برای پلتفرم اندروید، توسعه‌دهندگان درصدد هستند تا راهی بیابند تا به سادگی بتواند کدهای سوئیفت را روی اندروید اجرا کرد؛ لازم به ذکر است که گروهی از توسعه‌دهندگان پیش از این توانسته‌اند یک اپ نوشته شده با زبان اختصاصی اپل را روی گوگل‌پلی منتشر نمایند!

Elements Compiler
RemObjects را مجموعه‌ای از عناصر هیبریدی که به وسیلهٔ Jetbrains و Xamarin پیشنهاد شده‌اند تشکیل می‌دهد؛ RemObjects از مجموعه‌ای از ابزارها تشکیل شده‌اند که به شما برای توسعه اپلیکیشن‌های کراس‌پلتفرم کمک می‌کند. برای برنامه‌نویسی اندروید، شما می‌توانید از Silver برای نوشتن کد Swift استفاده کنید که البته امکان استفاده از API‌های نیتیو را نیز خواهید داشت (البته IDE این زبان آن طور که بقیه IDEها کار می‌کنند نبوده و هنوز جای کار بسیاری دارد.)

Rust
زبان برنامه‌نویسی Rust -که یک زبان کامپایلی است- محصول بنیاد موزیلا است (که یکی از محصولات معروف آن، مرورگر فایرفاکس است) و رشد چشمگیری را در سال گذشته داشته است به طوری که این زبان جایزهٔ محبوب‌ترین زبان برنامه‌نویسی Stack Overflow را در سال 2016 از آن خود کرده است. این زبان برای سیستم‌های پیچیده‌ای طراحی شده است که نیاز دارند چندین پروسس را در یک زمان اجرا کنند، این زبان مستقیماً برای برنامه‌نویسی موبایل ساخته نشده است، اما این موضوع هرگز باعث نمی‌شود که برنامه‌نویسان و توسعه‌دهندگان دست از کدنویسی اپ‌های موبایل با این زبان بردارند.

آیندهٔ بدون جاوا
پس از اختلافات و مسائل حقوقی که مابین شرکت‌های اوراکل و گوگل بر سر کپی‌رایت زبان جاوا بوجود آمد، اصلا مشخص نیست که در ذهن گوگل برای آیندهٔ برنامه‌نویسی اندروید چه می‌گذرد؛ لذا توسعه‌دهندگان اندورید می‌بایست همواره خود را در جریان آخرین اخبار و دستاوردهای این حوزه قرارداده تا یک‌بار از غافله عقب نمانند!

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

منبع