توسعه نرم‌افزار اندروید

بندانگشتی|180px|نکسوس ۴، بخشی از سری نکسوس گوگل، یکی از دستگاه‌های «توسعه پسند».
**توسعه نرم‌افزار اندروید** فرایندی است که به وسیلهٔ آن اپلیکیشن‌های جدید برای سیستم عامل اندروید ایجاد می‌شوند. اپلیکیشن‌ها معمولاً با استفاده از Android SDK به زبان برنامه‌نویسی جاوا توسعه می‌یابند، ولی محیط‌های توسعهٔ دیگری نیز وجود دارند.

## ابزارهای رسمی توسعه
### Android SDK
کیت توسعه نرم‌افزار اندروید (SDK) شامل مجموعهٔ جامعی از ابزارهای توسعه می‌شود. این ابزارها شامل دیباگر (ابزار اشکال‌زدا)، کتابخانه‌ها، شبیه‌سازی تلفن همراهِ مبتنی بر QEMU، مستندات، کد نمونه و خودآموزها می‌شود. در حال حاضر پلتفرم‌های توسعهٔ پشتیبانی‌شده شامل کامپیوترهایی می‌شوند که لینوکس (هر نوع توزیع مدرن دسکتاپ لینوکس)، Mac OS X 10.5.8 به بعد و ویندوز ۷ (قبلاً XP) یا نسخه‌های بعد آن را اجرا می‌کنند. از مارس ۲۰۱۵، SDK در خود اندروید موجود نیست، ولی توسعه نرم‌افزار با استفاده از اپلیکیشن‌های تخصصی اندروید امکان‌پذیر است.
تا حدود پایان سال ۲۰۱۴، محیط توسعه یکپارچه‌ای (IDE) که رسماً پشتیبانی می‌شد، Eclipse بود که از پلاگین ADT استفاده می‌کرد؛ گرچه IntelliJ IDEA IDE (تمام نسخه‌ها) به‌طور کامل توسعه اندروید را بدون هیچ پیکربندی و تنظیماتی پشتیبانی می‌کند، و NetBeans IDE نیز توسعه اندروید را از طریق پلاگین در اختیار می‌گذارد. از سال ۲۰۱۵، Android Studio (ساخته گوگل و قدرت‌گرفته از IntelliJ) به IDE رسمی اندروید بدل شد؛ به هر حال، توسعه‌دهندگان در استفاده از دیگر محیط‌ها آزاد هستند. علاوه بر این، توسعه‌دهندگان ممکن است از ویرایشگر متن برای ویرایش فایل‌های جاوا و XML استفاده کنند، سپس ابزارهای خط فرمان را (Java Development Kit و Apache Ant لازم است) به کار گیرند تا اپلیکیشن‌های اندروید را ایجاد کنند، بسازنند و اشکال‌زدایی نمایند، و همچنین دستگاه‌های اندروید متصل را (مثل انجام ریبوت، نصب بسته‌های نرم‌افزاری از راه دور) کنترل کنند.

بهبودهای SDK اندروید دست به دست در توسعه کلی پلتفرم اندروید صورت می‌گیرد. این SDK همچنین نسخه‌های قدیمی‌تر پلتفرم اندروید را در مواردی پشتیبانی می‌کند که توسعه‌دهندگان تمایل دارند اپلیکیشن‌های خود را در دستگاه‌های قدیمی‌تر نیز مد نظر داشته باشند. ابزارهای توسعه در واقع کامپوننت‌های قابل دانلود هستند، بنابراین بعد از این که آخرین نسخه و پلتفرم دانلود شد، پلتفرم‌های و ابزارهای قدیمی نیز می‌توانند برای تست سازگاری دانلود شوند.

اپلیکیشن‌های اندروید در فرمت .apk بسته‌بندی می‌شوند و در پوشه /data/app در سیستم عامل اندروید ذخیره می‌گردند (این پوشه به دلایل امنیتی فقط توسط کاربران روت (ریشه) دسترسی‌پذیر است). بستهٔ APK حاوی فایل‌های .dex (فایل‌های بایت‌کد کامپایل‌شده تحت عنوان فایل‌های اجرایی دالویک)، فایل‌های منبع و غیره است.

#### پل اشکال‌زدایی اندروید
پل اشکال‌زدایی اندروید (ADB) تولکیتی موجود در بسته Android SDK به‌شمار می‌رود. این تولکیت حاوی برنامه‌های سمت کلاینت و سمت سرور است که با یکدیگر ارتباط برقرار می‌کنند. ADB عموماً از طریق رابط خط فرمان قابل دسترسی است، گرچه رابط‌های گرافیکی بی‌شماری برای کنترل ADB در دسترس هستند.

فرمت مربوط به توزیع فرمان‌ها از طریق ADB معمولاً بدین صورت است:
```man
adb [-d|-e|-s]
    where -d is the option for specifying the USB-attached device,
    -e for indicating a running Android emulator on the computer,
    -s for specifying either one by its adb-assigned serial number.
    If there is only one attached device or running emulator, these
    options are not necessary.
```
برای مثال، اپلیکیشن‌های اندروید می‌توانند توسط فرمان backup در یک فایل ذخیره شوند که نام آن به‌طور پیش‌فرض backup.ab است.

در یکی از گزارش‌های امنیتی منتشر شده در مارس ۲۰۱۱، ADB مورد هدف قرار گرفت، طوری که یک برنامهٔ مخرب تلاش می‌کرد با استفاده از «حملهٔ اشباع منبع» در تلفن‌های متصل روت‌کیت نصب کند

#### Fastboot
فست‌بوت» به این‌جا تغییر مسیر می‌دهد [با کلیک روی لینک به آدرس دیگری فرستاده می‌شود]. برای قابلیت فست‌بوت (راه‌اندازی سریع) کامپیوتر شخصی، Instant-on را ملاحظه کنید. فست‌بوت یک پروتکل تشخیصی است که در بستهٔ SDK قرار دارد و اصولاً برای تغییر فایل سیستم فلش از طریق ارتباط USB از کامپیوتر میزبان به کار می‌رود. این کار مستلزم آن است که دستگاه در حالت boot loader یا Secondary Program Loader راه‌اندازی شود که در آن فقط پایه‌ای‌ترین راه‌اندازی‌های سخت‌افزاری انجام می‌شود. بعد از فعال کردن پروتکل در خود دستگاه، مجموعهٔ به‌خصوصی از فرمان‌های ارسال شده به آن از طریق USB را با استفاده از خط فرمان می‌پذیرد. تعدادی از رایج‌ترین فرمان‌های فست‌بوت شامل موارد زیر می‌شوند:
* flash – از طریق ایمج باینریِ ذخیره‌شده در کامپیوتر میزبان پارتیشن را از نو می‌نویسد.
* erase – قابلیت پاک کردن یک پارتیشن.
* reboot – دستگاه را در یکی از محیط‌های سیستم عامل اصلی، پارتیشن بازیابی سیستم یا بوت‌لودر راه‌اندازی مجدد می‌کند.
* devices – لیستی از تمام دستگاه‌های (همراه با شماره سریال) متصل به کامپیوتر میزبان را نمایش می‌دهد.
* format – پارتیشن به خصوصی را فرمت می‌کند؛ سیستم فایل این پارتیشن باید توسط دستگاه شناسایی شده باشد.

### Android NDK
کتابخانه‌های نوشته‌شده به C, C++ و دیگر زبان را می‌توان در معماری‌های ARM, MIIPS یا x86 native code کامپایل کرد و با استفاده از کیت بومی توسعه اندروید (NDK) نصب نمود. کلاس‌های بومی با استفاده از دستور System.loadLibrary می‌توانند از کد جاوای در حال اجرا تحت Dalvik VM فراخوانی شوند، که بخشی از کلاس‌های استاندارد اندروید جاوا محسوب می‌شوند.

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

اشکال‌زدای ADB تحت Android Emulator یک روت‌شل ارائه می‌کند که آپلود و اجرای ARM, MIPS یا x68 Native Code را ممکن می‌سازد. کد بومی می‌تواند با استفاده از GCC یا Intel C++ Compiler در یک کامپیوتر شخصی استاندارد کامپایل شود. اجرای کد بومی به خاطر استفادهٔ اندروید از کتابخانهٔ C غیر استاندارد (libc، تحت عنوان Bionic شناخته می‌شود) پیچیده‌است.
کتابخانهٔ گرافیکی که اندروید برای نظارت و کنترل دسترسی به این دستگاه استفاده می‌کند SGL نام دارد و تحت لیسانس منبع باز عرضه شده‌است. Skia برای هر دو پلتفرم Win32 و Unix بک‌اندهایی (backend) در اختیار دارد، که توسعه اپلیکیشن‌های چندپلتفرمی را امکان‌پذیر می‌سازد و موتور گرافیکی تحت مرورگر وب گوگل کروم محسوب می‌شود.

استفاده از Android Studio همراه با Gradle برای توسعه پروژه‌های NDK امکان‌پذیر است. ابزارهای شخص ثالث دیگری ادغام NDK در Eclipse و Visual Studio را ممکن می‌سازند.

### کیت توسعه باز لوازم جانبی اندروید
پلتفرم اندروید ۳٫۱ (که همچنین به اندروید ۲٫۳٫۴ بک‌پورت شده) پشتیبانی از Android Open Accessory را ارائه می‌کند که سخت‌افزار خارجی USB (لوازم جانبی USB اندروید) را قادر می‌سازد تا در حالت ویژهٔ «لوازم جانبی» با یک دستگاه اندرویدی در تعامل باشد. وقتی یک دستگاه اندرویدی در حالت لوازم جانبی قرار دارد، وسیلهٔ جانبی متصل به آن به عنوان میزبان USB (توان باس را تأمین و دستگاه‌ها را شمارش می‌کند) عمل می‌کند و دستگاه اندرویدی به عنوان دستگاه USB کار می‌کند. لوازم جانبی USB اندروید به‌خصوص برای اتصال به دستگاه‌های اندرویدی و پیوستن به پروتکل ساده (پروتکل لوازم جانبی اندروید) طراحی شده‌است که آن‌ها را قادر می‌سازد تا دستگاه‌های اندرویدی‌ای را شناسایی کنند که حالت لوازم جانبی را پشتیبانی می‌کنند.

### پشتیبانی بومی Go
از نسخهٔ ۱٫۴ زبان برنامه‌نویسی Go، نوشتن اپلیکیشن برای اندروید بدون نیاز به کد جاوا امکان‌پذیر بود، گرچه مجموعهٔ رابط‌های برنامه‌نویسی اندروید محدود بود.

## چالش برنامه‌نویس اندروید
چالش برنامه‌نویس اندروید یک رقابت برای یافتن ابتکاری‌ترین برنامه برای اندروید بود. گوگل جوایزی بالغ بر ۱۰ میلیون دلار آمریکا، بین ADC I و ADC II توزیع کرد. ADC ارسال‌ها را از ۲ ژانویه تا ۱۴ آوریل ۲۰۰۸ پذیرفت. ۵۰ تا از نوید بخش‌ترین مطالب، در تاریخ ۱۲ مه ۲۰۰۸ اعلام شد، هر یک جایزه ۲۵٬۰۰۰ دلار برای توسعه بیشتر دریافت کردند. این کار در اوایل ماه سپتامبر با اعلام ده تیمی که هر کدام ۲۷۵۰۰۰ دلار دریافت می‌کردند و ده تیمی که هر ۱۰۰۰۰۰ دلار دریافت می‌کردند به پایان رسید.

ADC II در ۲۷ مه ۲۰۰۹ اعلام شد. اولین دور مسابقه ADC II در ۶ اکتبر ۲۰۰۹ به پایان رسید. برندگان دور اول ADC II شامل ۲۰۰ برنامه برتر در ۵ نوامبر ۲۰۰۹ اعلام شدند. رای‌گیری برای دور دوم نیز در همان روز آغاز شد و در ۲۵ نوامبر به پایان رسید. گوگل برندگان برتر ADC II را در تاریخ ۳۰ نوامبر اعلام کرد، SweetDreams و WaveSecure به عنوان برندگان کلی این چالش معرفی شده‌اند.

## توسعهٔ خارجی سخت‌افزار
اهدف این ابزارهای توسعه کمک به دستگاه‌های اندروید به منظور تعامل با دستگاه‌های الکترونیکی خارجی است، برای مثال IOIO, Android Open Accessory Development Kit, Microbridge, Triggertrap و غیره.

## معیارهایی برای انتخاب بهترین زبان برنامه‌نویسی برای توسعه اپلیکیشن‌های موبایل
زمانی که قصد دارید یک زبان برنامه‌نویسی، فریم ورک یا SDK را برای این کار انتخاب کنید علاوه بر قابلیت‌های مربوط به ساخت UI اپلیکیشن‌ها باید به قابلیت‌های مربوط به توسعه بک اند (سمت سرور) نیز دقت داشته باشید. توسعه دهنده‌هایی که در بخش فرانت اند و بک اند فعالیت می‌کنند گاهی اوقات از یکدیگر جدا هستند و یک شخص خاص هم بک اند و هم فرانت اند را طراحی نمی‌کند اما معمولاً این دو فرد به صورت شرکتی با یکدیگر کار می‌کنند. در این مقاله ما قصد داریم برخی از زبان‌های برنامه‌نویسی محبوب برای توسعه اپلیکیشن‌های موبایل را هم برای بک اند کاران و هم برای فرانت اند کاران معرفی کنیم که آشنایی با آنها می‌تواند برای شما بسیار مفید باشد.

## توسعه اپلیکیشن‌های موبایل برای پلتفرم اندروید
اندروید یک پلتفرم متن باز است که منحصراً توسط شرکت گوگل توسعه پیدا کرده‌است. شرکت گوگل دارای تلفن‌های هوشمند با برند خود است که با نام Pixel (و در آینده ای نزدیک Nexus) وارد بازار می‌شوند. با این حال بسیاری از برندهای مختلف مانند سامسونگ، هواوی و … از این سیستم عامل در گوشی‌های خود پشتیبانی می‌کنند. امروزه دستگاه‌های مختلفی از جمله گوشی‌های هوشمند، ساعت‌های هوشمند و تبلت‌ها از سیستم عامل اندروید پشتیبانی می‌کنند.

برای ساخت برنامه اندروید به مجموعه ابزارهای توسعه اندروید نیاز دارید که توسط SDK مخصوص گوگل در اختیار شما قرار می‌گیرند. اندروید استودیو نیز می‌تواند یک IDE مناسب برای توسعه اپلیکیشن‌های موبایل اندروید باشد. شما می‌توانید از این ابزار بر روی سیستم عامل‌های مختلف لینوکس، ویندوز و مک استفاده کنید.

شما برای اضافه کردن کتابخانه‌های جدید به پروژه خود برای توسعه اپلیکیشن‌های موبایل می‌توانید از gradle که درون اندروید استودیو وجود دارد استفاده کنید و بسیاری از کتابخانه‌های شخص ثالث را به پروژه خود اضافه کنید. در ادامه دو زبان برنامه‌نویسی نیتیو برای توسعه اپلیکیشن‌های موبایل برای سیستم عامل اندروید را به شما معرفی خواهیم کرد.

## زبان برنامه‌نویسی کردی برای توسعه اپلیکیشن‌های موبایل برای اندروید
جاوا زبان برنامه‌نویسی پیش فرض برای توسعه اپلیکیشن‌های موبایل برای سیستم عامل اندروید می‌باشد. این زبان یک زبان برنامه‌نویسی شی گرا است که توسط شرکت Sun در سال ۱۹۹۵ توسعه پیدا کرده‌است و در حال حاضر مالکیت آن برای شرکت اوراکل است. جاوا یک زبان بسیار محبوب در میان زبان‌های شی گرا است که خیلی سریع توانست با سیستم عامل اندروید سازگار شود. کدهای جاوا در زمان کامپایل تبدیل به بایت کد می‌شوند و سپس با استفاده از ماشین مجازی جاوا در پلتفرم‌های مختلف اجرا می‌شوند. برخی از انتقادهایی که نسبت به جاوا موجود است این است که شما برای انجام یک کار ساده در این زبان برنامه‌نویسی باید زمان زیادی را صرف کنید و علاوه بر این درک برخی از مفاهیم این زبان نیز بسیار سخت است. با این وجود هنوز هم این زبان به عنوان زبان اصلی برای توسعه اپلیکیشن‌های اندروید به‌شمار می‌آید.

## منابع

رده:اجتماعات توسعه‌دهندگان نرم‌افزار
رده:اندروید
رده:تلفن‌های همراه هوشمند
رده:توزیع‌های لینوکس توکار
رده:لینوکس موبایل
رده:نرم‌افزارهای آزاد موبایل
رده:نرم‌افزارهای اندروید