آموزش اندروید، بخش دوم

در ادامه مبحثی که در آموزش قبلی مطرح شد، می خواهیم به بررسی جزئیات هر یک از لایه های پشته نرم افزاری اندروید(Android Software Stack) بپردازیم. ابتدا از لایه ی پایینی که مربوط به هسته لینوکس(Linux Kernel) است، شروع می کنیم. این لایه پایین ترین لایه از نرم افزار در پلتفرم اندروید است. این لایه خدمات اصلی که هر وسیله ی اندرویدی به آن وابسته است را فراهم می کند. هسته ی لینوکس اندروید، دقیقا مانند هر هسته ی لینوکسی دیگر، سرویس های یک سیستم عامل عمومی را فراهم می کند. برای مثال، معماری مجوز(Permissions Architecture)، تا اینکه شما بتوانید بصورت محدود به داده ها و منابع دسترسی داشته باشید. تا از این طریق، پردازش هایی که روی آن منابع و داده ها صورت می گیرد، مجوز مناسب را داشته باشند. هسته ی لینوکس همچنین از مدیریت حافظه و مدیریت پردازش پشتیبانی می کند. تا اینکه چندین پردازش بتوانند همزمان انجام شوند بدون اینکه با یکدیگر تداخل پیدا کنند. همچنین می تواند سطح پایینی از جزئیات فایل و ورودی/خروجی شبکه را مدیریت کند و همچنین اجازه می دهد تا راه انداز سخت افزارهای وسیله(Device Drivers) به یکدیگر متصل شوند تا اینکه اندروید بتواند با گستره ی وسیعی از  اجزای سخت افزاریِ سطح پایین که معمولا در وسایل محاسباتی وجود دارد، ارتباط برقرار کند. چیزهایی مثل حافظه، رادیو و دوربین.  علاوه بر سرویس های معمول که توسط هر نوع از هسته ی لینوکس پشتیبانی می شود، هسته ی لینوکسِ آندروید شامل چندین کامپوننت می شود که خاص اندروید است. برای مثال، هسته ی لینوکس اندروید شامل سرویس مدیریت باتری می شود که خاص اندروید است. زیرا دستگاه های موبایل معمولا به وسیله شارژ باتری کار می کنند. همچنین شامل  ویژگی های سیستم اشتراک گذاری حافظه و مدیریت حافظه است، زیرا دستگاه های موبایل معمولا حافظه ی محدود دارند. و همچنین هسته لینوکسی اندروید شامل “مکانیزم ارتباط بین پردازشی” می شود که Binder نام دارد. Binder این امکان را به ما می دهد که چندین پردازش، داده های خود را به روشی پیشرفته به اشتراک بگذارند. البته این فقط بخش کوچکی از ویژگی های خاص اندروید است. ویژگی های بسیار زیادی وجود دارد که فعلا در مورد آنها بحث نمی کنیم.

linux-kernel
[divider]

لایه بالاتر شامل کتابخانه های سیستمی متنوع می شود. این کتابخانه ها به طور عمده به زبان های C و C++ نوشته شده اند و علت این کار این است که معمولا این کتابخانه ها به عنوان کتابخانه های بومی مورد استفاده قرار می گیرند. و این کتابخانه های بومی در بسیار زیادی از عملکردهای اصلی و فعالیت های حساس گوشی تلفن همراه درگیر هستند. چیزهایی مثل “پردازش سریع صفحات وب و بروزرسانی صفحه نمایش مثال هایی از این فعالیت ها هستند. برای مثال، اندورید کتابخانه C مخصوص به خود را دارد که فراخوانی های استاندارد سیستم عامل را پیاده سازی می کند که کارهایی مثل پردازش و ایجاد Thread را انجام می دهد. یا اعمالی مثل محاسبات ریاضی، دسترسی به حافظه و بسیاری دیگر از کارها

system-libraries
یک مدیریت کننده پوسته وجود دارد که برای بروز رسانی صفحه نمایش بکار می رود. یک فریمورک چندرسانه ای برای پخش فایل های موزیک و ویدئو، Webkit برای رندر کردن و نمایش دادن صفحات وب، OpenGL برای عملکرد بالای گرافیکی و SQLite برای مدیریت پایگاه های داده ای رابطه ای در حافظه کاربرد دارد. علاوه بر کتابخانه های سیستم، این لایه همچنین شامل runtime اندروید می شود که نوشتن و اجرای برنامه های اندروید را ممکن می کند. و همچنین دو کامپوننت در runtime اندروید وجود دارد که در ادامه درباره ی آنها صحبت خواهیم کرد. هسته ی کتابخانه های جاوا و ماشین مجازی دالویک(Dalvik Virtual Machine) که در ادامه  در مورد هر یک از این دو صحبت خواهیم کرد.

[divider]
هسته ی کتابخانه های جاوا

برنامه های اندروید عموماً به زبان برنامه نویسی جاوا نوشته می شوند. و برای اینکه برنامه نویسی آسانتر شود، آندروید تعدادی از تکه برنامه های قابل استفاده را فراهم کرده که توسعه دهندگان می توانند در برنامه های خود از آنها استفاده کنند. به عنوان مثال، Java، Java X، یا همان Java Extensions Packages شامل برنامه های پایه ای و ابتدایی برای کارهایی مثل “ساختمان داده های رایج”، “مکانیزم های همزمانی” و “ورودی/خروجی فایل”:

*.JAVA

*.JAVAX

بسته های Android دارای نرم افزار هستند که این نرم افزارها خصوصیات سیکل حیاتی نرم افزارهای موبایل را در اختیار ما قرار می دهند.

*.ANDROID

بسته ی Org عملیات مختلف وی یا اینترنت را فراهم می کند.

*.ORG

و بسته های Junit تست واحد برنامه ها را پشتیبانی می کند.

*.JUNIT

[divider]
ماشین مجازی دالویک(Dalvik Virtual Machine)

دومین بخش از runtime اندروید، ماشین مجازی دالویک است. ماشین مجازی دالویک یک نرم افزار است که در واقع برنامه های اندرویدی را اجرا می کند. همونطور که قبلا اشاره شد، برنامه های اندرویدی قاعدتاً به زبان جاوا نوشته می شوند.  بنابراین شما ممکن است فرض کرده باشید از آنجایی که این برنامه ها به زبان جاوا نوشته شده اند، پس احتمالا بر روی یک ماشین مجازی استاندارد که بر پایه جاوا کار میکند، اجرا می شوند. اما در حقیقت، این مورد صحت ندارد. چیزی که واقعا اتفاق می افتد این است که توسعه دهندگان ابتدا برنامه های خود را به زبان جاوا می نویسند و سپس کامپایلر جاوا فایل های کدمنبع را به چندین فایل کدمیانی جاوا(Java bytecode) کامپایل می کند. سپس، ابزاری به نام DX جاوا بایت کد را به یک فایل که بر اساس نوع دیگری از بایت کد قالب بندی شده، تبدیل می کند. این قالب بایت کد dex نام دارد و معمولا فایل آن classes.dex خوانده می شود. سپس فایل dex به همراه دیگر منابع برنامه بسته بندی می شود و بر روی وسیله نصب می گردد. و در نهایت، زمانی که کاربر برنامه را اجرا می کند، ماشین مجازی دالویک فایل classes.dex برنامه را اجرا می کند. حالا، دلیل انجام این همه کار این است که ماشین مجازی دالویک، برخلاف ماشین مجازی جاوا، بطور خاص برای اجرا در محیط هایی با منابع محدود طراحی شده است که برای دستگاه های موبایل مناسب است. زمانی که گفته می شود “منابع محدود”، منظور این است که در مقایسه با یک سیستم کامپیوتری مانند PC، یک دستگاه تلفن همراه در بسیاری از ویژگی ها ضعیف تر و محدود تر است. برای مثال، تلفن همراه احتمالا CPU کندتر، حافظه کمتر و عمر باتری کوتاهتری دارد.

در جلسه ی آینده در مورد لایه ی بعدی، یعنی Application Framework بحث خواهیم کرد.

 

دیدگاهی در “آموزش اندروید، بخش دوم

  1. با سلام و خسته نباشید بعداز مدتها گشتن در اینترنت بالاخره یک مطلب درست و جامع در مورد اندروید خوندم مرسی تشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *