اندروید چیست؟
اندروید مجموعه ای از نرم افزارهای (software stack) موبایل است که شامل سیستم عامل، middleware ها و برنامه های کلیدی (key applications) است. اندروید SDK، ابزارها و APIهای لازم برای شروع برنامه نویسی بر روی پلتفرم اندروید با زبان برنامه نویسی جاوا را مهیا کرده است.
خصوصیات:
- چارچوب برنامه (Application framework): امکان استفاده مجدد و جایگزینی کامپوننت ها را فراهم میکند.
- ماشین مجازی دالویک (Dalvik virtual machine): وظیفه بهینه سازی کدها برای اجرا بر روی موبایل را دارد.
- مرورگر داخلی (Integrated browser): منطبق بر موتور WebKit منبع باز
- گرافیک بهینه شده (Optimized graphics): قدرت گرفته از کتابخانه ۲D، گرافیک ۳D منطبق بر OpenGL ES 1.0 (شتاب دهنده سخت افزاری)
- SQLite: برای ذخیره اطلاعات
- پشتیبانی از رسانه (Media support): با پشتیبانی از فرمتهای رایج صوتی، ویدئویی و عکس (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
- مکالمات تلفنی (GSM Telephony): (وابسته به نوع سخت افزار)
- Bluetooth, EDGE, 3G, and WiFi: (وابسته به نوع سخت افزار)
- دوربین، GPS، قطب نما و شتاب سنج: (وابسته به نوع سخت افزار)
- محیط توسعه غنی (Rich development environment): شامل ایمولاتور، ابزارهای دیباگ کردن، پروفایل کردن حافظه و پلاگین برای محیط توسعه اکلیپس
معماری اندروید:
تصویر زیر لایه ها و کامپوننت های اصلی سیستم عامل اندروید را نشان میدهد.
برنامه های کاربردی (Applications):
اندروید به همراه بسته های مختلفی از جمله email client, SMS program, calendar, maps, browser, contacts, and others ارایه میشود. تمام این برنامه ها با استفاده از زبان برنامه نویسی جاوا نوشته شده اند.
چارچوب برنامه (Application Framework):
با فراهم آوردن پلتفرم توسعه باز (open development platform)، اندروید برنامه سازان را قادر کرده است تا برنامه های کاربردی خلاقانه و غنی برای این پلت فرم فراهم سازند. توسعه دهندگان آزادی کامل دارند تا از ویژگیهایی مانند دسترسی به سخت افزار، دسترسی به اطلاعات محلی (موقیت جغرافیایی)، اجرای سرویس های پس زمینه (background services)، تنظیم زنگ ساعت، اضافه کردن اطلاعیه ها (notifications) به نوار وضعیت و بسیاری بسیاری دیگر در برنامه هایی که میسازند، استفاده کنند.
توسعه دهندگان دسترسی کامل به همان چارچوب APIهایی دارند که برنامه های هسته (the core applications) دارند. معماری برنامه های کاربردی (The application architecture) بمنظور ساده سازی استفاده مجدد از کامپوننت ها طراحی شده است. هر برنامه ای می تواند قابلیت های خود را در اختیار دیگر برنامه ها قرار دهد و همچنین از قابلیت های دیگر برنامه ها استفاده کند (البته به محدودیت های امنیتی چارچوب هم بستگی دارد). این طرزکار مشابه به کاربر اختیار تعویض و جایگزینی کامپوننت ها را می دهد.
برنامه های زیربنایی، مجموعه ای از سرویس ها و سیستم های زیرند:
- مجموعه قابل گسترشی از View ها که برای ساخت برنامه های کاربردی استفاده می شوند، مانند lists, grids, text boxes, buttons, and even an embeddable web browser
- Content Providers، که برنامه ها را قادر میسازد تا به اطلاعات برنامه های دیگر مانند لیست تماس، دسترسی پیدا کنند یا حتی اجازه دسترسی به اطلاعات خود را به برنامه های دیگر دهند.
- یک مدیر منابع (Resource Manager) اجازه دسترسی به منابعی که کد-برنامه نیستند را فراهم میکند مانند دسترسی به رشته های محلی (localized strings)، تصاویر و فایل های مربوط به طرح برنامه (layout files).
- یک مدیر اطاعیه (Notification Manager)، که از این طریق برنامه ها را قادر میکند تا هشدارهای خود را در نوار وضعیت نشان دهند.
- یک مدیر فعالیت (Activity Manager)، که مدریت چرخه زندگی (lifecycle) برنامه ها را در دست دارد و به نحوه اجرای برنامه ها نظارت میکند.
کتابخانه ها (Libraries):
اندروید شامل مجموعه از کلاسهای ++C/C است که توسط کامپوننت های سیستم اندروید مورد استفاده قرار میگیرند. همچنین استفاده از این قابلیت به توسعه دهندگان نیز داده شده است. بعضی از این کتابخانه های اصلی به این قرارند:
- System C library – a BSD-derived implementation of the standard C system library (libc), tuned for embedded Linux-based devices
Media Libraries – based on PacketVideo’s OpenCORE; the libraries support playback and recording of many popular audio and video formats, as well as static image files, including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager – manages access to the display subsystem and seamlessly composites 2D and 3D graphic layers from multiple applications
LibWebCore – a modern web browser engine which powers both the Android browser and an embeddable web view
SGL – the underlying 2D graphics engine
3D libraries - an implementation based on OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration (where available) or the included, highly optimized 3D software rasterizer
FreeType – bitmap and vector font rendering
SQLite – a powerful and lightweight relational database engine available to all applications
زمان اجرای اندروید (Android Runtime):
اندروید شامل مجموعه ای از کتابخانه های اصلی است که اکثر عملکردهای قابل دسترس را با استفاده از زبان جاوا ممکن میسازد. هر برنامه کاربردی اندروید در فرایند مخصوص به خودش اجرا میشود و دسترسی مخصوص به خود در ارتباط با ماشین مجازی دالویک دارد. این ماشین بگونه ای ساخته شده است که هر دستگاهی (device) میتواند چندین ماشین مجازی را بطور همزمان اجرا کند. هر ماشین مجازی دالویک فایل ها را به فرمت (dex.) اجرا میکند که اینکار باعث بهینه سازی در دستگاه هایی که حافظه پایینی دارند، می شود. این ماشین مجازی مبتنی بر رجیسترهاست و کلاسهایی که توسط کامپایلر جاوا ساخته شده است را اجرا میکند.
ماشین مجازی دالویک برای اجرای قابلیت های اساسی مانند مدریت حافظه کم و چند نخی (threading) متکی بر هسته لینوکس است.
هسته لینوکس (Linux Kernel):
اندروید متکی بر لینوکس نسخه ۲٫۶ برای انجام سرویس های اصلی مانند security, memory management, process management, network stack و driver model است. این هسته همچنین مانند یک لایه انتزاعی (abstraction layer) مابین سخت افزار و سایر نرم افزارها عمل میکند.