بذارید بهش فکر کنم. طبقهبندی مطالب در «انتشارات».
راهنمای توسعهدهندگان موبایل به سمت کهکشان: فصل سوم
فصل سوم: توسعه اندروید (Android Development)
نویسنده: دانیل بُهْرس (Daniel Böhrs)

اکوسیستم (The Ecosystem)
پلتفرم اندروید (Android) توسط اتحادیه گوشی باز (Open Handset Alliance) به رهبری گوگل (Google) توسعه یافته و از سال 2007 به صورت عمومی در دسترس قرار گرفته است. استفاده از آن توسط اکثر تولیدکنندگان سختافزار، آن را به سریعترین سیستمعامل گوشیهای هوشمند در حال رشد تبدیل کرده است که امروزه بر بازار تسلط دارد: بیش از 75 درصد از سهم بازار سیستمعامل موبایل در سراسر جهان. در کنفرانس توسعهدهندگان آی/او (I/O) 2019، گوگل اعلام کرد که 2.5 میلیارد دستگاه اندرویدی فعال وجود دارد که شامل پوشیدنیها (wearables)، تبلتها، ستتاپ باکسها (set-top boxes)، تلویزیونها، تلفنها و سیستمهای سرگرمی خودرو نیز میشود.
اصطلاح اندروید، اکوسیستم کاملی را در کنار خود سیستمعامل توصیف میکند. گوگل و چندین شرکت دیگر مانند آمازون (Amazon)، فروشگاهها، برنامههای پیشفرض و سایر اجزایی را ارائه میدهند که مستقیماً با خود سیستمعامل همراه نیستند. تمام اجزای مورد نیاز ترکیب شده، سیستمی قابل توسعه برای استفاده روزانه را در اختیار کاربر قرار میدهند. هر دستگاهی که مجوز گوگل را داشته باشد، مجاز به استفاده از سرویس گوگل پلی (Google Play Service) و فروشگاه گوگل پلی (Google Play Store) است. این فروشگاه حدود 2.4 میلیون برنامه³ ارائه میدهد و بزرگترین فروشگاه برنامههای کاربردی موبایل در سراسر جهان است. سرویسهای پلی (Play Services) اختصاصی، دسترسی به APIهای خود گوگل مانند گوگل مپس (Google Maps) و گوگل اسیستنت (Google Assistant) را فراهم میکنند.
علاوه بر بازیگران بزرگی مانند گوگل و آمازون، رامهای سفارشی (custom ROMs) به اصطلاح، که توسط جامعه اندروید یا شرکتهای دیگر توسعه یافتهاند نیز قابل استفاده هستند. اینها اغلب از فروشگاههای جایگزین برای ارائه برنامهها استفاده میکنند. یک مثال، فروشگاه اف-دروید (F-Droid) است که فقط برنامههای منبع باز (open source) را مجاز میداند. استفاده از اینها به کاربران اندروید امکان میدهد در صورت تمایل، تجربهای بدون گوگل داشته باشند. اکوسیستم اندروید یک سیستم عظیم و انعطافپذیر برای نرمافزار روی دستگاههای سختافزاری مختلف است.
به دلیل تعداد زیاد تولیدکنندگان، دستگاهها و اقتباسهای اندروید، یکی از بزرگترین مشکلات این پلتفرم، پراکندگی (fragmentation) نسخههای مورد استفاده است. این منجر به عدم اطمینان در مورد اینکه آیا برنامه اندروید شما در همه جا اجرا میشود یا خیر و اغلب نیاز به کار اضافی توسط توسعهدهندگان دارد. علاوه بر این، تطبیق آخرین نسخه سیستمعامل در مقایسه با سایر پلتفرمهای موبایل کندتر است. با این حال، در سالهای اخیر گوگل تلاشها برای کاهش پراکندگی را افزایش داده است و امروزه اگر تصمیم بگیرید نسخه 5.0 آبنباتچوبی (Lollipop) یا بالاتر را هدف قرار دهید، به حدود 90 درصد از پایگاه نصب دست خواهید یافت.

دادههای جمعآوری شده طی یک دوره 7 روزه منتهی به 7 می 2019. هر نسخهای با توزیع کمتر از 0.1% نشان داده نمیشود و دستگاههای بدون برنامههای گوگل (مانند دستگاههای آمازون و بسیاری از تولیدکنندگان مستقر در چین) شمارش نمیشوند. تمام نسخههای قبل از اندروید 4.4 نیز به دلیل قدیمی بودن حذف شدهاند.
نسخههای اخیر (Recent Versions)
هر سال یک بار گوگل نسخه جدیدی از اندروید را با ویژگیها، بهبودها و رفع اشکالات امنیتی منتشر میکند. این همچنین به معنای امکانات و چالشهای جدید برای توسعهدهندگان است. در آمادهسازی برای بهروزرسانیها، توسعهدهندگان باید استفاده از توابع یا APIهای SDK منسوخ شده یا حذف شده را نیز بررسی کنند تا از ناسازگاریها جلوگیری شود.
(جدول توزیع نسخههای اندروید در صفحه 47 کتاب اصلی با مقادیر زیر در اینجا قرار میگیرد)
- کیتکت 4.4 (KitKat 4.4) - API: 19 - 6.9%
- آبنباتچوبی 5.0 (Lollipop 5.0) - API: 21 - 3.0%
- آبنباتچوبی 5.1 (Lollipop 5.1) - API: 22 - 11.5%
- مارشمالو 6.0 (Marshmallow 6.0) - API: 23 - 16.9%
- نوقا 7.0 (Nougat 7.0) - API: 24 - 11.4%
- نوقا 7.1 (Nougat 7.1) - API: 25 - 7.8%
- اوریو 8.0 (Oreo 8.0) - API: 26 - 12.9%
- اوریو 8.1 (Oreo 8.1) - API: 27 - 15.4%
- پای 9 (Pie 9) - API: 28 - 10.4%
اندروید 9 (پای - Pie)
اندروید 9 (با اسم رمز: پای) در آگوست 2018 منتشر شد. با ویژگیهای باتری تطبیقی (Adaptive Battery) و روشنایی تطبیقی (Adaptive Brightness)، اندروید 9 به طور خودکار برنامهها، سرویسها و روشنایی را بسته به عادات کاربر تنظیم میکرد تا عمر باتری را بیشتر افزایش دهد. همچنین App Actions را معرفی کرد: با قدرت یادگیری ماشین (machine learning)، اندروید سعی میکند رفتار کاربر را پیشبینی کند و میانبرهایی را بر اساس الگوهای استفاده فردی شناسایی شده ارائه دهد. مدل تعامل برای برنامههای اخیر (recent apps)، که به کاربران امکان میداد به سرعت بین برنامهها جابجا شوند، یکی دیگر از ویژگیهای جدید اندروید پای بود. درست مانند آیاواس (iOS)، اندروید نیز از این نسخه به کاربران اجازه میدهد تا بر زمان صفحه نمایش (screen time) خود نظارت کنند: یک داشبورد برای تجسم تعداد دفعات استفاده از برنامهها اضافه شد. کاربران همچنین میتوانند زمان استفاده از برنامهها را محدود کرده و حالت خاکستری (grayscale) یا حالت مزاحم نشوید (Do Not Disturb) را به صورت خودکار فعال کنند.
از آنجایی که طراحیهای سختافزاری ناچ (notch) بیشتر و بیشتر مورد توجه قرار میگیرند، اندروید 9 اولین نسخه اندرویدی بود که از آن پشتیبانی میکرد. از دیدگاه توسعهدهندگان، مهمترین اخبار در اندروید 9 شامل ویژگیهای جدید ناوبری داخلی با استفاده از موقعیتیابی داخلی با Wi-Fi RTT و اعلانهای پیشرفته، به عنوان مثال کلاس جدید Person، که امکان ارائه اطلاعات غنیتر را فراهم میکند، بود. اکنون همچنین امکان دسترسی همزمان به دوربینها و ایجاد، به عنوان مثال، استریمهایی با محتوای تصویر در تصویر (picture in picture) وجود دارد. یک رمزگشای تصویر جدید (image decoder)، کلاسی برای انیمیشنهای تصویر، کدکها (codecs) و APIهای رسانهای بهتر با هدف ارائه گزینههای بیشتر به توسعهدهندگان برای ایجاد برنامههای چندرسانهای بهینه شده است. API شبکههای عصبی (Neural Networks API) نیز برای ارائه عملیات بیشتر بهروز شد.
اندروید 10 (Android 10)
با جدیدترین نسخه اندروید در سپتامبر 2019، طرح نامگذاری تغییر کرده است. گوگل مدتهاست که نرمافزار اندروید خود را به نام شیرینیها نامگذاری کرده است. این دوران به پایان رسیده است. برای جلوگیری از سردرگمی، آخرین نسخه به سادگی اندروید 10 نامیده میشود بدون هیچ اسم رمز اضافی.
اندروید 10 پشتیبانی از گوشیهای تاشو (foldable phones) و همچنین پشتیبانی بومی از پوستهبندی (theming)، از جمله حالتهای تاریک (dark modes) محبوب که برخی برنامهها ارائه میدهند، را به ارمغان آورد. کاربران اکنون همچنین به یک ضبط کننده صفحه نمایش (screen recorder) بومی و یک پنل تنظیمات شناور (floating settings panel) کاملاً جدید دسترسی دارند.
یکی دیگر از ویژگیهای جالب از دیدگاه کاربر، گزینه اشتراکگذاری جدید است: اندروید 10 میانبرهای خاصی را برای اشتراکگذاری مستقیم محتوا با مخاطبین ارائه میدهد.
اگر برنامه شما برای دسترسی به دادههای خاص کاربر نیاز به مجوز (permission) دارد، توجه داشته باشید که گوگل با محدود کردن دسترسی به موقعیت مکانی، امنیت را افزایش داده است. این امر مدیریت مجوز جدیدی را برای تعاملات پسزمینه (background interactions) اضافه میکند و دسترسی به شناسههای دستگاه (device identifiers) را محدود میکند.
و اگر روی برنامههای رسانهای کار میکنید، خبرهای خوبی برای شما وجود دارد: اندروید 10 از چندین کدک چندرسانهای جدید پشتیبانی میکند و یک API میدی (MIDI API) بومی برای تعامل با کنترلکنندههای موسیقی ارائه میدهد. اکنون همچنین امکان ضبط خروجی صوتی ارائه شده توسط برنامههای دیگر وجود دارد.
اندروید 10 به توسعهدهنده امکان میدهد اتصالات شبکه همتا به همتا (peer-to-peer) را به عنوان مثال برای تنظیمات با سایر دستگاهها فراهم کند. برای پیکربندی مواردی مانند شبکه یا صدا، میتوان پنل تنظیمات شناور ذکر شده را توسط توسعهدهندگان فعال کرد تا امکان تغییر پیکربندی بدون ترک کامل زمینه برنامه فراهم شود.
مدیریت بهینهسازی شده برای ایجاد فایلها در حافظه خارجی اضافه شد که در مورد ایجاد در حال انتظار اطلاع میدهد یا به ذخیره انواع فایلهای خاص در دایرکتوری مناسب کمک میکند. برای ارائه یک تجربه بیدرنگ پیشرفته در حین بازی یا سایر تعاملات، میتوان از حالتهای عملکرد بالا (high-performance) و تأخیر کم (low-latency) وایفای استفاده کرد. در حین انجام این کار، API حرارتی (Thermal API) جدید به پیگیری دما و بار دستگاه کمک میکند.
اقتباسهای سختافزاری (Hardware Adaptations)
اندروید نه تنها یک سیستمعامل گوشی هوشمند است، بلکه یک سیستم سرگرمی خودرو و سیستمعامل برای پوشیدنیها و تلویزیونها نیز هست. برای انطباق با فرم فاکتورهای مختلف، کنترلها و مناطق استفاده، و برای کاهش محدودیتهای احتمالی، مانند عدم وجود ورودی لمسی، چندین تغییر در سیستم اندروید پیادهسازی شد.
سیستم عامل Wear OS
سیستم عامل Wear OS که قبلاً با نام اندروید وِر (Android Wear) شناخته میشد، اقتباس گوگل از اندروید برای ساعتهای هوشمند است. این سیستم یک رابط کاربری سادهشده ارائه میدهد، زیرا ساعتهای هوشمند نمایشگرهای بسیار کوچکتری نسبت به گوشیهای هوشمند دارند. بنابراین، کنترلهای صوتی (voice controls) نقش مهمی در این زمینه ایفا میکنند. Wear OS بیشتر در ترکیب با یک گوشی هوشمند متصل استفاده میشود، حتی اگر دستگاههای Wear OS از نظر فنی بتوانند به سیم کارت خود مجهز شوند. یک ویژگی کلیدی، اکوسیستم برنامههای گوگل فیت (Google Fit) است که از ردیابی دویدن و دوچرخهسواری، فعالیت قلب، شمارش گام و غیره پشتیبانی میکند. کاربران میتوانند از ساعت خود برای کنترل تلفن خود - به عنوان مثال موسیقی - استفاده کنند. اعلانها از طریق موتور لرزش (vibration engine) یکی دیگر از عناصر کلیدی هستند. اینها میتوانند برای اعلانهای گوگل ناو (Google Now) مانند یادآوری پرواز، هشدارهای ترافیکی، یادآوری جلسات و غیره استفاده شوند.
اندروید تیوی (Android TV)
اندروید تیوی اقتباسی از سیستمعامل را با توجه به صفحههای بزرگ و عدم وجود تعاملات لمسی ارائه میدهد. یک رابط کاربری بسیار بزرگتر با کنترلهای سادهشده، قابل استفاده با کنترل از راه دور و کنترلهای صوتی اضافه شد. همچنین امکان کنترل تلویزیون از طریق گوشی هوشمند وجود دارد. یکی از مهمترین موارد استفاده از تلویزیونهای اندرویدی، استفاده از برنامههای پخش جریانی (streaming apps) مانند یوتیوب (Youtube) و نتفلیکس (Netflix) است. برخی از تلویزیونهای اندرویدی همچنین پشتیبانی مستقیمی از گیرنده کروم کست (Chrome Cast Receiver) ارائه میدهند، بنابراین کاربران میتوانند صفحه نمایش خود را آینه کنند یا محتوا را مستقیماً از تلفن یا وب خود به دستگاه پخش کنند.
برنامههای اندروید تیوی از همان ساختار برنامههای تلفن و تبلت استفاده میکنند. بنابراین، توسعهدهندگان میتوانند از برنامهها و دانش موجود خود برای هدف قرار دادن پلتفرم تلویزیون استفاده کنند. برای یادگیری نحوه انجام این کار به developer.android.com/tv مراجعه کنید.
اندروید آتو (Android Auto)
از آنجایی که گوشیهای هوشمند اغلب به عنوان دستگاههای ناوبری استفاده میشوند، اندروید آتو به عنوان نسخه تنظیمشدهای از اندروید توسعه یافت که امکان نمایش محتوا را روی صفحه نمایش داخلی خودرو فراهم میکند. انجام این کار یک رابط کاربری ویژه را فعال میکند که بر ناوبری، ارتباطات و سرگرمی متمرکز است. تعاملات اغلب از طریق دستورات صوتی انجام میشود تا راننده بتواند روی جاده تمرکز کند.
اقتباسهای نرمافزاری (Software Adoptions)
اکوسیستم اندروید به فروشندگان اجازه میدهد تا رفتار پیشفرض و طراحی ارائه شده توسط سیستم را از بسیاری جهات گسترش داده یا تغییر دهند. برخی از فروشندگان، مانند سامسونگ (Samsung) یا آمازون، اغلب یک رابط کاربری کاملاً سفارشیشده یا حتی پیادهسازیهای متفاوتی از قابلیتهای پایه را در دستگاههای خود ارائه میدهند. این منجر به اکوسیستمهای خاص فروشنده و تجربیات کاربری متفاوت در سراسر اکوسیستم اندروید میشود. این امر دارای یک جنبه مثبت است، به عنوان مثال یکپارچگی بسیار محکم که تجربه شگفتانگیزی را برای کاربران فراهم میکند، و همچنین یک جنبه منفی، مانند افزایش پراکندگی اکوسیستم.
گوگل یک رابط فروشنده (vendor interface) برای کاهش ناسازگاریها ارائه میدهد، در حالی که به فروشندگان مقداری انعطافپذیری نیز میدهد. این همچنین باید به کاهش زمان بهروزرسانی (time-to-update) برای بهروزرسانیهای سیستم کمک کند. این رابط برای استفاده توسط فروشندگانی در نظر گرفته شده است که میخواهند ظاهر و احساس نسخه اندروید خود را تنظیم کنند، اما اگر تبدیل کاملی برنامهریزی شده باشد، مانند کاری که آمازون با Fire OS انجام داد، امکانپذیر نیست.
اندروید وان (Android One)
اندروید وان تلاش گوگل برای ارائه یک تجربه اندروید خالص با آخرین بهروزرسانیهای نرمافزاری به مدت دو سال و بهروزرسانیهای امنیتی به مدت سه سال است. اندروید وان در سال 2014 معرفی شد و قرار است یک نسخه امن و سازگار اندروید برای همه باشد. این نسخه را میتوان به عنوان اندروید وانیلی (vanilla Android) با برخی بهینهسازیهای اضافی توسط گوگل در نظر گرفت.
اندروید گو (Android Go)
اندروید گو یک نسخه سبک وزن از اندروید است که برای ارائه عملکرد روان در دستگاههای پایینرده توسعه یافته است. این سیستم برای اجرا بر روی گوشیهای هوشمندی طراحی شده است که دارای 1 گیگابایت یا کمتر رم هستند. حتی برنامههای موجود در فروشگاه پلی نیز برای این دستگاهها بهینهسازی خواهند شد که عمدتاً بازارهای نوظهور مانند هند یا چین را هدف قرار میدهند. ویژگیهای اصلی آن صرفهجویی در داده (data saving)، نیاز به فضای ذخیرهسازی کمتر و عملکرد بهتر در دستگاههای پایینرده است.
شروع به کار
سیستمعامل اندروید مبتنی بر نرمافزار آزاد است و از هسته لینوکس (Linux kernel) به عنوان پایه استفاده میکند. مهمترین لایه برای توسعهدهندگان، محیط زمان اجرای جاوا (Java Runtime Environment) بالای لایه سیستمعامل است. به اصطلاح زمان اجرای اندروید (Android Runtime - ART) امکان اجرای فایلهای APK را فراهم میکند. اینها با کامپایل کد جاوا (Java) یا کاتلین (Kotlin) از طریق OpenJDK برای اندروید ایجاد میشوند. این روش اصلی برای ایجاد برنامهها برای پلتفرم اندروید است. کد C یا C++ نیز از طریق کتابخانههای بومی (native libraries) امکانپذیر است. به ویژه اجزای پرمصرف مانند کدکهای چندرسانهای، موتورهای مرورگر و لایههای رمزگذاری پایگاه داده از این رویکرد استفاده میکنند.
در طول کنفرانس گوگل آی/او 2019، کاتلین به عنوان زبان اصلی برای توسعه اندروید اعلام شد. قرار است جایگزین جاوا شود. با این حال، امکان ترکیب هر دو در یک پروژه نیز وجود دارد. زبان کاتلین توسط جتبرینز (JetBrains)، سازندگان اینتلیجی آیدیا (IntelliJ IDEA) توسعه یافته است. این زبان رویکردی مدرنتر، ایمنتر و مختصرتر برای ایجاد برنامههای اندروید ارائه میدهد. کد کاتلین را میتوان به بایتکد جاوا (Java byte code) و همچنین کد جاوااسکریپت (JavaScript code) کامپایل کرد.
حتی اگر کاتلین به تدریج جایگزین جاوا میشود، جاوا هنوز یک پلتفرم کاملاً تثبیت شده برای توسعه برنامههای اندروید است. اما مراقب باشید، تنها زیرمجموعهای از کتابخانهها و بستههای جاوا پشتیبانی میشوند و APIهای خاص پلتفرم زیادی وجود دارند که با اندروید کار نمیکنند.
میتوانید پاسخ سؤالات "چه چیزی و چرا" خود را به صورت آنلاین در راهنمای توسعهدهندگان اندروید (Android's Dev Guide) و سؤالات "چگونه" خود را در مستندات مرجع (reference documentation) بیابید. علاوه بر این، گوگل دو بخش در مستندات خود به نامهای "Codelabs" و "Courses" معرفی کرده است که به توسعهدهندگان جدید در یادگیری بهترین شیوههای مختلف برای جاوا و کاتلین کمک میکند. در اینجا میتوانید در مورد اصول اولیهای مانند ناوبری (navigation) و ارتباطات درونبرنامهای (inter-app communication)، و همچنین ویژگیهای پیشرفتهتری مانند دانلود هوشمند بیتمپ (intelligent Bitmap downloads) و بهینهسازی برنامه خود برای عمر باتری بهتر بیاموزید. توسعهدهندگان با تجربه میتوانند گواهینامه توسعهدهنده اندروید همکار (Associate Android Developer Certification) را توسط گوگل دریافت کنند.
برای شروع، به اندروید SDK نیاز دارید که برای ویندوز (Windows)، مک اواس ایکس (Mac OS X) و لینوکس (Linux) در دسترس است. این شامل ابزارهای مورد نیاز برای ساخت، آزمایش، اشکالزدایی و تجزیه و تحلیل برنامهها است. توسعه در یک نسخه اقتباس شده از IDE اینتلیجی آیدیا انجام میشود. این ابزار اندروید استودیو (Android Studio) نامیده میشود و علاوه بر توسعه، امکان ساخت خودکار، بررسی سینتکس (syntax checking) و آزمایش را نیز فراهم میکند. جدیدترین نسخههای اندروید استودیو با تمام ابزارها و اجزای مورد نیاز برای شروع سریع توسعه اندروید همراه هستند.
پشتیبانی IDE
اندروید استودیو IDE رسمی برای اندروید است و مستقیماً با پشتیبانی گریدل (Gradle Support) و بسیاری از ویژگیهایی که به صراحت برای توسعه اندروید طراحی شدهاند، ارائه میشود. این به عنوان یک دانلود از پیش بستهبندی شده شامل اندروید SDK در دسترس است. لیست ویژگیهای توسعهیافته و همچنین مستندات کاربر نهایی را میتوان در وبسایت رسمی اندروید استودیو یافت. خود اندروید استودیو با کد نمونه ارائه میشود و مستندات کد را برای تمام کلاسها و متدهای سیستمی موجود ارائه میدهد. اندروید استودیو همچنین از آخرین ویژگیهای توسعه کاتلین پشتیبانی میکند و توسعهدهنده را قادر میسازد تا از ویژگیهای مدرن، ایمن و مختصر کاتلین استفاده کند.
برای اندازهگیری عملکرد، پروفایلر اندروید (Android Profiler) به شما امکان میدهد تا میزان استفاده از پردازنده مرکزی + رم + پردازنده گرافیکی (CPU + RAM + GPU) را پیگیری کنید و پروفایلر شبکه (Network Profiler) به شما امکان میدهد بستههای ارسال شده از طریق اتصالات بیسیم خود را بررسی کنید.
توسعه بومی (Native development)
اندروید NDK (مجموعه توسعه بومی اندروید) امکان نوشتن اجزای بومی را برای برنامههای شما با استفاده از JNI (رابط بومی جاوا) برای فراخوانی متدهای بومی و استفاده از زیرکلاسهای بومی که فراخوانیهای برگشتی (callbacks) را به همتایان غیربومی خود ارائه میدهند، فراهم میکند. این برای توسعهدهندگان بازی و هر کسی که نیاز به پردازش کارآمد دارد، مهم است.
پیادهسازی
معماری برنامه (App Architecture)
برنامههای اندروید معمولاً شامل ترکیبی از اکتیویتیها (Activities)، فرگمنتها (Fragments)، جابها (Jobs)، سرویسها (Services)، BroadcastReceiver، ContentProvider و موارد دیگر هستند؛ همه اینها باید در مانیفست (manifest) برنامه اعلام شوند. مانیفست همچنین شامل متادیتای (metadata) یک برنامه، مانند عنوان، نسخه و مجوزهای مورد نیاز آن است.
یک اکتیویتی (Activity) بخشی از عملکرد با یک رابط کاربری متصل است. از فرگمنتها (Fragments) میتوان برای تقسیم اکتیویتیها به بخشهای کوچکتر و قابل استفاده مجدد استفاده کرد. یک سرویس (Service) یا جاب (Job) برای کارهایی استفاده میشود که در پسزمینه اجرا میشوند و بنابراین، مستقیماً به یک نمایش بصری گره نخوردهاند. یک BroadcastReceiver پیامهایی را که توسط سیستم پخش میشوند و توسط برنامه شما یا برنامههای دیگر ارسال میشوند، مدیریت میکند. یک ContentProvider رابطی برای محتوای یک برنامه است که از مکانیزمهای ذخیرهسازی زیربنایی، به عنوان مثال SQLite، انتزاع میکند.
یک برنامه ممکن است از چندین مورد از این اجزا تشکیل شود، به عنوان مثال، یک اکتیویتی برای رابط کاربری و یک سرویس برای کارهای طولانی مدت. ارتباط بین اجزا توسط اینتنتها (Intents) یا فراخوانیهای رویهای راه دور (remote procedure calls) که توسط زبان تعریف رابط اندروید (Android Interface Definition Language - AIDL) مدیریت میشوند، انجام میشود.
اینتنتها دادههایی مانند موقعیت مکانی کاربر یا یک URL را با یک عمل (action) همراه میکنند. این اینتنتها رفتارهایی را در پلتفرم فعال میکنند و میتوانند به عنوان یک سیستم پیامرسانی در برنامه شما استفاده شوند. به عنوان مثال، اینتنت نمایش یک صفحه وب، مرورگر را باز میکند. یک جنبه قدرتمند این فلسفه بلوک ساختمانی این است که هر عملکردی میتواند با برنامه دیگری جایگزین شود، زیرا سیستم اندروید همیشه از برنامه ترجیحی برای یک اینتنت خاص استفاده میکند. به عنوان مثال، اینتنت اشتراکگذاری یک صفحه وب که توسط یک برنامه خبرخوان فعال میشود، بسته به برنامههای نصب شده و ترجیح کاربر، میتواند یک کلاینت ایمیل یا یک برنامه پیامرسانی متنی را باز کند: هر برنامهای که اینتنت اشتراکگذاری را به عنوان رابط خود اعلام کند، ممکن است استفاده شود.
رابط کاربری یک برنامه از کد در فایلهای طرحبندی XML خاص اندروید جدا شده است. طرحبندیهای مختلف را میتوان برای اندازههای مختلف صفحه نمایش، محلیهای کشور و ویژگیهای دستگاه بدون دست زدن به کد واقعی ایجاد کرد. برای این منظور، رشتهها و تصاویر محلیشده در پوشههای منابع (resource folders) جداگانه سازماندهی میشوند. البته، شما همچنین قادر به تعریف و طراحی طرحبندیها در کد هستید یا از هر دو استراتژی برای فعال کردن بهروزرسانیهای پویا رابط کاربری استفاده میکنید.
اندروید جتپک (Android Jetpack)
اندروید جتپک اجزایی را برای توسعهدهندگان گرد هم میآورد تا برنامههای سریعتر و قویتری را برنامهنویسی کنند. این شامل ابزارها، کتابخانهها و چندین جزء دیگر برای سادهسازی توسعه و ارائه سازگاری با نسخههای قدیمیتر اندروید است. برخی از بخشهای اصلی، اجزای پایه (foundation components) هستند که پشتیبانی از زبان کاتلین و سازگاری با عقب را فراهم میکنند و اجزای معماری (Architecture components) که به شما کمک میکنند تا برنامه خود را به روشی اثباتشده ساختار دهید. همچنین اجزای رفتاری (Behavior components) مهم هستند، اینها دسترسی آسان و پایداری به سیستم مجوزهای اندروید و گوگل اسیستنت را فراهم میکنند. اجزای رابط کاربری (UI components) به شما کمک میکنند تا برنامههای زیباتری بدون نوشتن کد بیشتر ایجاد کنید.
هر توسعهدهنده اندروید جدید و موجود باید حداقل نگاهی بیندازد که آیا برخی از اجزای طراحی شده ماژولار، که از طریق کتابخانههای androidx.* قابل استفاده هستند، میتوانند برای پروژههای او مفید باشند.
متریال دیزاین (Material Design)
زبان طراحی پایه اندروید "متریال دیزاین" در سال 2014 معرفی شد. طراح ماتیاس دوارته (Matías Duarte) ایده اصلی را توضیح داد: "برخلاف کاغذ واقعی، متریال دیجیتال ما میتواند هوشمندانه گسترش یابد و تغییر شکل دهد. متریال دارای سطوح و لبههای فیزیکی است. درزها و سایهها در مورد آنچه میتوانید لمس کنید، معنا میدهند."
متریال دیزاین یک هویت بصری قوی و سازگار را به اکوسیستم اندروید آورد، موازی اما متمایز از طراحی تخت (flat design) آیاواس و طراحی مترو (Metro design) ویندوز. برای تشویق یک تجربه کاربری قوی و ظاهر سازگار برنامههای اندروید، گوگل مستندات جامعی برای زبان طراحی و یک راهنمای طراحی برای توسعهدهندگان ارائه میدهد. این راهنما با پرداختن به اهمیت طرحهای رنگی، الگوهای طراحی و متریال دیزاین، جهتگیری عالی را هنگام ساخت برنامهها برای اکوسیستم اندروید فراهم میکند.
متریال دیزاین همچنین پایه و اساس رابط کاربری سیستمعامل و برنامههای سیستمی را تشکیل میدهد. علاوه بر این، کتابخانههای متنوعی پشتیبانی از متریال دیزاین را به پلتفرمهای مختلف دیگر مانند وب آوردهاند.
پوستهبندی (Theming) نیز پشتیبانی میشود در حالی که همچنان به دستورالعملهای متریال دیزاین پایبند است. یک مثال برای این، پوسته بازیل (Basil theme) است.
کیت توسعه نرمافزار (SDK) و پلاگینها
برای کمک به توسعه، ابزارهای زیادی در SDK در اختیار دارید که مهمترین آنها عبارتند از:
- ابزار adb: برای پرسوجو از دستگاهها (فیزیکی و مجازی) و اتصال و تعامل با آنها از طریق انتقال فایلها، نصب برنامهها و موارد مشابه.
- ابزار avdmanager: برای ایجاد و مدیریت دستگاههای مجازی از همه انواع.
- ابزار emulator: برای شبیهسازی ویژگیهای تعریف شده یک دستگاه مجازی. به دلیل راهاندازی سریع عکس فوری (fast snapshot startups) و شتاب سختافزاری (hardware acceleration)، شبیهساز برای روال توسعه روزانه بسیار مفید است.
- ابزار sdkmanager: برای نصب و بهروزرسانی اجزای اندروید SDK.
این ابزارها به همراه بسیاری دیگر، از جمله ابزارهایی برای تجزیه و تحلیل گزارشهای ردیابی متد (method trace logs)، بازرسی طرحبندیها و آزمایش برنامهها با رویدادهای تصادفی، در دایرکتوری tools در SDK یافت میشوند. اکثر آنها همچنین از طریق رابط کاربری اندروید استودیو IDE قابل دسترسی هستند.
اگر از ویژگیهایی مانند ConstraintLayouts استفاده میکنید، حتماً بستههای مربوط به کتابخانه پشتیبانی/AndroidX (Support Library/AndroidX) را از گوگل اضافه کنید. آنها از طریق اجزای پایه اندروید جتپک در دسترس هستند. آنها توسعهدهندگان را قادر میسازند تا ویژگیهای مدرن را در نسخههای قدیمیتر اندروید بدون مشکلات سازگاری مستقر کنند. در صورت امکان، همیشه از این اجزای سازگار با عقب به جای عناصر معمولی استفاده کنید تا از بروز مشکلات در دستگاههای اندرویدی قدیمیتر جلوگیری کنید.
برای ارائه مقداری سازگاری با عقب به طور کلی، گوگل شروع به استفاده از چارچوب سرویسهای گوگل پلی (Google Play Services framework) کرد که از طریق فروشگاه پلی بهروز میشود و برخی کتابخانههای اصلی مانند آخرین نسخه گوگل مپس را اضافه میکند. به این ترتیب دستگاههای قدیمیتر قادر به دسترسی به APIها و اجزای جدیدتر زنجیره نرمافزار گوگل میشوند.
علاوه بر سازگاری با عقب، تقریباً همیشه توصیه میشود که نسخه API اخیر اندروید را در فایل build.gradle خود هدف قرار دهید تا از ویژگیهای جدید سیستم بهرهمند شوید. اندروید استودیو شما نیز باید بهروز باشد تا بتوانید از آخرین بهبودهای عملکرد و بهروزرسانیهای ویژگی در حین توسعه استفاده کنید.
برای ارائه اعلانهای فشاری (push notifications)، تجزیه و تحلیلها (analytics)، قابلیتهای یادگیری ماشین و گزارشهای خرابی (crash reports)، گوگل فایربیس (Google Firebase) میتواند راهحلی ارزشمند برای بررسی باشد. فایربیس مجموعه عظیمی از توابع را ارائه میدهد که به راحتی در پروژههای اندروید استودیو ادغام میشوند.
تست کردن (Testing)
اولین قدم در تست یک برنامه، اجرای آن بر روی شبیهساز یا یک دستگاه است. سپس میتوانید آن را از طریق اندروید استودیو اشکالزدایی و تجزیه و تحلیل کنید.
تمام نسخههای سیستمعامل اندروید برای اجرا بر روی دستگاهها بدون تغییر ساخته شدهاند، با این حال، برخی از تولیدکنندگان سختافزار ممکن است بخشهایی از پلتفرم را تغییر داده باشند. بنابراین، تست بر روی ترکیبی از دستگاهها ضروری است. برای اینکه ایدهای از محبوبترین دستگاهها داشته باشید، به لیست AppBrain مراجعه کنید.
کتابخانه پشتیبانی تست اندروید (Android Testing Support Library) مجموعهای از ابزارهای ماژولار را برای پوشش اکثر سناریوهای تست فراهم میکند. JUnit4 پایه و اساس تمام تستهای واحد (unit tests) است، اسپرسو (Espresso) یک API بسیار سبک ارائه میدهد که به نوشتن سریع تستهای رویهای (procedural tests) برای رابط کاربری شما کمک میکند و AndroidJUnitRunner به شما در اجرای تستهایتان کمک میکند.
تستها را میتوان با استفاده از فرمت استاندارد JUnit، با استفاده از اشیاء ساختگی اندروید (Android mock objects) که در SDK موجود هستند، نوشت. کتابخانههای اضافی مانند Mockito میتوانند به افزایش عملکرد در حین ایجاد تستهای واحد اندروید کمک کنند.
برای خودکارسازی تست، اندروید SDK با برخی ابزارهای ابزار دقیق تست (testing instrumentation tools) توانمند و مفید ارائه میشود. UI Automator به اندروید 4.3 (سطح API 18) نیاز دارد و رابط دستگاه ضبط شده را شامل برخی اطلاعات در مورد نماهای ارائه شده به شما ارائه میدهد. اجرای تستها نسبتاً آسان است: پس از نوشتن تست، میتوان آن را مستقیماً از داخل اندروید استودیو ساخت، اجرا و به دستگاه یا شبیهساز تحویل داد.
ابزار MonkeyRunner یک ابزار اتوماسیون تست قدرتمند و قابل توسعه برای تست کل برنامه است. این تستها را میتوان هم بر روی دستگاههای مجازی و هم فیزیکی اجرا کرد. تستهای نوشته شده در پایتون (Python) میتوانند با ایجاد اسکرینشاتها و ارسال رویدادهای سیستمی مانند فشار دادن کلید، رابط کاربری را نظارت کنند. سپس تستهای شما میتوانند وضعیت برنامه شما را پس از وقوع این رویدادها بررسی کنند.
چارچوبهای تست منبع باز، مانند Robotium، میتوانند تستهای خودکار دیگر شما را تکمیل کنند. Robotium حتی میتواند برای تست فایلهای APK باینری در صورتی که منبع برنامه در دسترس نباشد، استفاده شود. Roboelectric یکی دیگر از ابزارهای عالی است که تستها را مستقیماً در IDE شما در JVM استاندارد/دسکتاپ شما اجرا میکند.
تستهای خودکار شما را میتوان بر روی سرورهای یکپارچهسازی مداوم (continuous integration servers) مانند Jenkins یا Hudson اجرا کرد. Roboelectric در یک JVM استاندارد اجرا میشود و به محیط زمان اجرای اندروید نیاز ندارد. اکثر چارچوبهای تست خودکار دیگر، از جمله Robotium، مبتنی بر چارچوب Instrumentation اندروید هستند و باید در JVM مربوطه اجرا شوند. پلاگینهایی مانند Android Emulator Plugin امکان پیکربندی و اجرای این تستها را در Hudson و Jenkins فراهم میکنند.
ساخت (Building)
علاوه بر ساخت مستقیم برنامه خود در IDE انتخابیتان، راههای انعطافپذیرتری نیز برای ساخت برنامههای اندروید وجود دارد. گریدل (Gradle) ابزار اتوماسیون ساخت رسماً پشتیبانی شده برای اندروید است. همچنین یک پلاگین مِیْوِن (Maven plugin) وجود دارد که به خوبی توسط جامعه پشتیبانی میشود. هر دو ابزار میتوانند از وابستگیها (dependencies) از مخازن مختلف مِیْوِن (Maven repositories)، به عنوان مثال، مخزن مرکزی مِیْوِن (Maven Central Repository) استفاده کنند.
سیستم ساخت گریدل مجموعه عظیمی از امکانات پیکربندی را فراهم میکند. امکان استفاده از طعمهای (flavors) مختلف برای ساخت، به عنوان مثال، یک نسخه رایگان و یک نسخه پولی از برنامه وجود دارد، در حالی که تمایز کلی بین ساختهای اشکالزدایی (debug builds) و انتشار (release builds) نیز امکانپذیر است. تقریباً همه چیز را میتوان در فایل build.gradle شما پیکربندی کرد، که توسعهدهنده را قادر میسازد تا فرآیند ساخت را نیز خودکار کند.
برای کوچک کردن اندازه برنامهها و مبهمسازی (obfuscate) کد، میتوان از کامپایلر جدید R8 مستقیماً در خط لوله ساخت گریدل شما استفاده کرد.
برای کاهش بیشتر اندازه برنامهها، گوگل بستههای برنامه اندروید (Android App Bundles) را معرفی کرد که حاوی کد کامپایل شده و منابع هستند، اما APKها را به طور خاص برای نیازهای دستگاههای درخواست کننده تولید و امضا میکنند. این اتفاق مستقیماً در گوگل پلی در صورت ارائه بسته برنامه رخ میدهد.
امضا کردن (Signing)
برنامههای شما همیشه توسط فرآیند ساخت امضا میشوند، یا با امضای اشکالزدایی یا انتشار. همان امضا باید برای بهروزرسانیهای برنامه شما استفاده شود - بنابراین مطمئن شوید که فایل keystore یا رمز عبور را گم نکنید. به یاد داشته باشید: میتوانید از همان کلید برای همه برنامههای خود استفاده کنید یا برای هر برنامه یک کلید جدید ایجاد کنید.
گوگل همچنین یک راهحل متمرکز برای امضا ارائه میدهد. امضای برنامه گوگل پلی (Google Play App Signing) بخش زیادی از کار را به زیرساخت گوگل واگذار میکند و میتواند مشکلات مربوط به مدیریت و ایمنسازی کلیدهای مورد نیاز را کاهش دهد.
توزیع (Distribution)
پس از ایجاد برنامه قاتل بعدی و تست آن، باید آن را در فروشگاه برنامه اندروید به نام "پلی" (Play) در play.google.com/apps/publish آپلود کنید. شما ملزم به ثبت نام در سرویس با استفاده از حساب گوگل چکاوت (Google Checkout Account) خود و پرداخت هزینه ثبت نام 25 دلاری هستید. پس از تأیید ثبت نام شما، میتوانید برنامه خود را آپلود کنید، اسکرینشاتها و توضیحات را اضافه کنید، سپس آن را منتشر کنید.
مطمئن شوید که یک versionName و versionCode در build.gradle خود و یک نماد، یک برچسب و مجوزهای مورد نیاز را در AndroidManifest.xml خود تعریف کردهاید.
فروشگاه گوگل پلی، علاوه بر انتشار تولیدی (production rollouts)، تست آلفا و بتا (alpha and beta testing) به علاوه انتشار مرحلهای (staged rollouts) را نیز ارائه میدهد. این به شما امکان میدهد قبل از انتشار برنامه برای همه کاربران، مقداری تست کاربر دوستانه انجام دهید. علاوه بر این، میتوانید با تنظیم پرچمهای مناسب در کنسول توسعهدهنده (Developer Console)، کشورها و دستگاههای خاصی را هدف قرار دهید و آمار دقیقی را صادر کنید که به درک پایگاه کاربر شما کمک میکند. با استفاده از سرویس محلیسازی داخلی (inbuilt localization service)، میتوانید به راحتی با پرداخت هزینه، زبانهای جدیدی را به برنامه خود اضافه کنید - برای اطلاعات دقیق در مورد اهمیت این موضوع، حتماً چک لیست محلیسازی (Localization Checklist) را بررسی کنید.
از آنجایی که برنامههای رقیب زیادی در اندروید پلی وجود دارد، ممکن است بخواهید از فروشگاههای برنامه جایگزین استفاده کنید. آنها روشهای پرداخت متفاوتی را ارائه میدهند و ممکن است گروههای مصرفکننده خاصی را هدف قرار دهند. یکی از این بازارها، فروشگاه اپلیکیشن آمازون (Amazon Appstore) است که به صورت از پیش نصب شده بر روی خانواده تبلت کیندل فایر (Kindle Fire) ارائه میشود. اما باید به خاطر داشته باشید که فروشگاههای پلی جایگزین، کاربر را مجبور میکنند تا منابع ناشناس (unknown sources) را برای نصب برنامه فعال کند، که همیشه یک خطر امنیتی بالقوه است.
و حتماً فصل مربوط به بهینهسازی اپ استور (app store optimization) را در این راهنما بخوانید تا راه موفقیت خود را هموار کنید.
کسب درآمد (Monetization)
گوگل پلی کانال توزیع اصلی و البته محبوبترین پلتفرم برای توزیع برنامههای اندروید است. گوگل 25 دلار برای ثبت نام و کارمزد تراکنش 30 درصدی از درآمد شما دریافت میکند.
اما فروشگاه پلی تنها گزینه شما نیست. برای اکوسیستمهای خاص فروشنده، مانند سامسونگ اپس (Samsung Apps) یا فروشگاه اپلیکیشن آمازون، باید استفاده از SDKهای آنها را برای بهرهمندی از مزایای کسب درآمد بهینه در نظر بگیرید.
علاوه بر فروش یک برنامه در یکی از فروشگاههای برنامه متعدد موجود، چندین روش مختلف برای کسب درآمد از یک برنامه اندروید وجود دارد. یک راه مناسب استفاده از تبلیغات است که ممکن است مبتنی بر کلیک یا نمایش باشد و میتواند درآمد ثابتی را فراهم کند. غیر از آن، امکانات مختلف صورتحساب درونبرنامهای (In-App Billing) مانند سرویس خود گوگل که از فروشگاه گوگل پلی استفاده میکند یا SDK پرداختهای درونبرنامهای اسکوئر (Square's In-App Payments SDK) وجود دارد. اکثر سرویسها در کارمزدهای مبتنی بر تراکنش و امکاناتی که ارائه میدهند، مانند اشتراکها، پرداختهای موازی یا پرداختهای از پیش تأیید شده، متفاوت هستند.
مطمئن شوید که روش پرداخت انتخابی شما با شرایط و ضوابط بازارهای مختلفی که میخواهید برنامه خود را در آن منتشر کنید، هماهنگ باشد. به خصوص برای دانلودهای دیجیتال، که قوانین متفاوتی برای آنها وجود دارد، ارزش بررسی دارد.
باز هم: البته یک فصل اختصاصی در مورد کسب درآمد نیز در این راهنما وجود دارد. پس ادامه دهید و بیشتر بخوانید.
مطلبی دیگر از این انتشارات
راهنمای توسعهدهندگان موبایل به سمت کهکشان: فصل هفتم
مطلبی دیگر از این انتشارات
راهنمای توسعهدهندگان موبایل به سمت کهکشان: فصل ششم
مطلبی دیگر از این انتشارات
این نقاشیها را هوش مصنوعی کشیده است