بررسی فریم ورک و معماری سیستم عامل اندروید
این ویدئوی آموزشی با هدف ایجاد یک درک پایه ای برای توسعه دهندگان، از معماری سیستم عامل و پلتفروم اندروید، تهیه شده است. این ویدئو با بررسی هسته سیستم عامل اندروید، Android Runtime، Libraries، Application Framework و برنامه های نصب شده در سیستم عامل اندروید استارت می خورد و با بحث پیرامون کامپوننت ها در زبان برنامه نویسی اندروید ادامه پیدا خواهد کرد.
فهرست مطالب آموزش
معماری سیستم عامل و پلتفروم اندروید
توسعه دهندگان اندروید نیاز به حداقل یک درک پایه ای از معماری سیستم عامل و پلتفروم مورد بحث دارند.
هسته سیستم عامل اندروید مبتنی بر لینوکس، طراحی شده. اندروید یک نسخه از لینوکس هست، که برای سیستم عامل های تلفن همراه بهینه سازی شده. تا حد ممکن کوچیک ساخته شده به طوری که در دستگاه هایی که ظرفیت های پردازنده یا CPU و حافظه محدود دارند به خوبی کار کنه.
یکی از مورد توجه ترین های هسته سیستم عامل اندروید ران تایم اون هستش
و مجموعه ای از تنظیمات کتابخانه ها و اطلاعاتی با عنوان libraries بسیاری از رفتارها و عملکردهای سیستم عامل رو قادر به اجرا میکنند.
سطح بعدی چهارچوب برنامه برای ایجاد درک پایه ای application framework هست، که بعد از ران تایم و libraries قابل بررسی هستش.
و در نهایت بعد از برنامه ها، سیستم عامل و برنامه های نصب شده توسط کاربر رو با نام application داریم. بیایید ببینیم هر کدوم از این لایه ها چی هستن.
لایه پایینی هسته لینوکس، خودش با لینوکس استارت میشه
اما پس از اون یه مجموعه ای از درایورها رو شامل میشه. هر درایور برای ارتباط با بخشی از ابزارهای سیستم عامل اندروید طراحی شده. درایور هایی برای صوت، دوربین، صفحه نمایش، صفحه کلید، مدیریت حافظه فلش، باتری، Wi-Fi، و غیره وجود داره. در واقع این لایه عملکردهای اصلی سیستم رو مدیریت میکنه. OME ها یا شرکت های تولید کننده قسمت سخت افزاری دستگاه های مبتنی بر اندروید برای ارتباط با سیستم عامل اندروید دستگاه هاشون کافی هست که ابزارهاشون رو برای این درایورهای گفته شده در هسته لینوکس سفارشی کنن. بنابراین اگه شما یک دستگاه اندرویدی رو در دستتون داشته باشید، نسخه ی اندرویدی که در اون دستگاه هست، ترکیبی از نتیجه تلاش شرکت میزبان اندروید یعنی گوگل و شرکت فروشنده سخت افزار در دستتون خواهد بود. این موضوع حتی برای دستگاه های Nexus هم صادق هست، چرا که همه اونها توسط فروشندگان خاص تولید شدن. بد نیست بدونید نکسوس یک سری از دستگاههای موبایل هستش که از سیستمعامل اندروید تولید شده، توسط گوگل استفاده میکنن و با همکاری تولید کنندگان منتخب سختافزار، ساخته میشه. هدف از تولید سری نکسوس، ارائه تجربهی “اندروید خالص” هست. فروشنده های برند دیگه رو اگر بخواهیم مثال بزنیم میشه به سامسونگ، ایسوس، LG، موتورولا، HTC، و غیره اشاره کرد. در کل اینطور میشه گفت که هسته تمام نقاط قوت لینوکس ؛ مانند شبکه بندی و طیف وسیعی از درایورهای دستگاه ها که به عنوان واسط سخت افزارهای جانبی عمل می کنند، رو مدیریت می کنه.
لایه بعدی ران تایم اندروید هست،
که شامل تنظیمات کتابخانه های هسته ، با نام (core libraries) و ویرچوال ماشین (VM) میشه. بیایید بیشتر در مورد این لایه آموزش ببینیم .اندروید 4.4 و نسخه های پیش از اون از یک ویرچوال ماشین به نام دالویک (Dalvik) استفاده می کردند. در اندروید 5، دالویک با یک ویرچوال ماشین ساده جدید به نام ART برای ران تایم اندروید جایگزین شد.ART به طور امتحانی در کیت کت معرفی شد، اما پس از اون به طور کامل در اندروید 5 یا آب نبات چوبی با دالویک جایگزین شد.ART از یک مدل کامپایل اولیه یا مدل کامپایل در حین نصب، به جای مدل دقیقاً در لحظه ی بکار رفته در دالویک استفاده میکنه. این یعنی برنامه ها بلافاصله پس از نصب کامپایل میشن به جای اینکه منتظر بمونن تا ویژگی ها یا بهتر بگم فی چرهای برنامه نصب شده بعد از اولین بار ران شدن، خودشون رو تطابق بدهند. در نتیجه، برنامه ها، با ART کمی سریع تر اجرا می شوند. بقیه چیزها یکسانند، به علاوه ART در جمع آوری برنامه ها و حذف اطلاعات اضافی در حین کار با سیستم عامل اندروید بهتر شده، بنابراین شما وقفه و هنگ در برنامه ها رو در شرایطی که حافظه کمی دارید کمتر میببینید.
میریم سراغ کامپایل برنامه های اندروید، برای اینکار از کامپایلری شامل Android STK و کتابخانه های موجود در STK استفاده میشه. این کتابخانه های مرتبط یا libraries، تمام ویژگی های متنوع اندروید رو مدیریت می کنند،
از جمله گرافیک، پایگاه داده مثلا SQLite، رمزنگاری و قسمت امنیت اینترنت SSL ، موتور مرورگر وب متن باز WebKit، فونت ها و غیره. و در همون سطح از نرم افزار به عنوان هسته ران تایم کار می کنن، اما قابل توسعه هستن و همینطور تولیدکننده ها می تونن کتابخانه های خودشون رو به این لایه اضافه کنن.
در سطح بعدی؛ چهارچوب برنامه یا application framework رو میبینید،
که ماژول هایی برای کنترل تمام اجزای مختلف برنامه هاتون رو داره، و شامل فعالیت هایی هستش، که نشان دهنده صفحه های نمایشی هست که کاربران می بینند و مدیریت داده ها و همچنین جابجایی شون بین برنامه ها رو برعهده داره. مکان ها، اخطارها ، پنجره ها، منابع، مدیریت شماره تلفن، و غیره از جمله مثال های آشنایی هستند که می تونم خدمتتون عرض کنم.
و در نهایت، در آخرین سطح، برنامه ها یا application وجود داره. شما تمام اپلیکیشن های اندروید رو در لایه ی بالا می بینید. شما اپلیکیشن هاتون رو فقط برای نصب بر روی این لایه می نویسید.
هر نسخه از اندروید که توسط گوگل تهیه شده و به اون یک PACKAGE اطلاق داده میشه، با مجموعه ای گسترده از برنامه های پیش فرض ارائه می شه. اگر یک دستگاه مجاز به استفاده از خدمات گوگل باشه، در حال حاضر دارای جیمیل، هنگوت، نقشه های گوگل، و بسیاری از برنامه های نصب شده ی دیگه خواهد بود. بد نیست همین جا این رو هم بدونید که دستگاه هایی که از نسخه های سفارشی متن باز اندروید استفاده میکنن ، مثل گجت کیندل فایر شرکت آمازون، نسخه هایی از برنامه های پیش فرض خودشون رو دارن. کمه کم هر نسخه از اندروید یک صفحه اصلی، یک مرورگر وب، تنظیم کننده محتوا و تاریخ، تلفن و دوربین رو داره. نسخه های جدید اندروید اکثر برنامه های استاندارد رو دارن،
به علاوه اگه بخواهید می توانید برنامه های بسیار دیگری رو به دستگاه تون اضافه کنید.
معماری کامپوننت ها
درواقع دستگاه شما هم شامل برنامه هایی هست که می تونید ازمارکت ها بگیرید و هم برنامه هایی که خودتون ساختید، یعنی شما می تونید
به عنوان یک توسعه دهنده، برنامه هاتون رو با component های مختلف تو دستگاهتون داشته باشید.
component های متنوعی وجود داره، و هر component در اندروید به عنوان یک کلاس جاوا مجزا اجرا میشه.
مثال هایی برای کامپوننت ها در کلاس های جاوا
ما در تصویر زیرچند نمونه ساده از این کلاس ها رو بهتون نشون میدیم.
مثلا یک اکتیویتی برای نشون دادن صفحه نمایشی که کاربر می بینه،
یک نمونه از یک کلاس به نام android.app.Activity هستش. به علاوه شما می تونید از کلاس های مشتق شده بجای کلاس اصلی استفاده کنید، اما همه چیز بستگی داره به کدی که در کلاس جاوا نوشتید.
وقتی شما یک جزء بصری رو به یک صفحه نمایش اضافه میکنید، مثل یک button، یک text box، یک radio button، و غیره، همه نمونه هایی از کلاس های جاوا هستن.
مثلاً یک button یک نمونه از یک کلاس به نام android.widget.Button هستش. بنابراین برای درک اجزای مختلفی که برای ساخت برنامه هاتون قابل استفاده اند، باید شرح اطلاعات API برای آندروید SDK رو بدونید.
انواع کامپوننت ها
عمدتاً چیزی که روی صفحه نمایش، دیده میشه فعالیت ها و ویوها هستن. یک button یک ویوهست، ولی componentهای غیر بصری هم وجود دارن.
به عنوان مثال، سرویس ها یک نوع خاص از component هایی هستند که می توانند در پشت پرده اجرا بشن، والبته این کامپوننت ها با توجه به ماهیت شون قابل دیدن نیستن. یعنی با اینکه کاربر اونا رونمی بینه، ولی پشت پرده اجرا می شوند، حتی وقتی که کاربر در محیط های قابل رؤیت بین برنامه های مختلف درحال حرکت هست.
گیرنده های پخش ؛ پیام های سیستمی را دریافت و عکس العمل نشون میدن. پیام های سیستمی در واقع همون پیام هایی هستن که توسط سیستم عامل و یا برنامه های دیگه فرستاده می شوند.
برنامه نویسان، میزان دسترسی به داده ها رو با برنامه نویسی رابط های کاربری تنظیم می کنند، که به برنامه ها و سرویس ها اجازه میده بر روی یک دستگاه با هم تبادل اطلاعات داشته باشن. برای اینکار اونها از یک API استاندارد استفاده میکنن که این API متدهایی داره برای ایجاد، خواندن، به روز رسانی و حذف داده. البته همه برنامه ها تمام این componentهای پلتفروم رو استفاده نمی کنند. مثلاً ساده ترین برنامه های تجاری ممکن هست از روش های ذخیره سازی داده ها و ورودی و خروجی ساده استفاده کنند، در حالی که برنامه های پیچیده تر، ممکن هست ازترکیب ساختارهای پیچیده ای تشکیل شده باشند. این ها گفته شد تا شما به عنوان توسعه دهنده اندروید تصمیم بگیرید که چه برنامه ای و چه عناصری از پلت فرم اندروید رو برای استفاده کردن نیاز دارید.