معماری اندروید

معماری سیستم اندروید شامل اجزای زیر است:

مروری بر معماری سیستم اندروید
شکل 1. معماری سیستم اندروید
  • چارچوب برنامه . فریم ورک برنامه اغلب توسط توسعه دهندگان برنامه استفاده می شود. به‌عنوان یک توسعه‌دهنده سخت‌افزار، باید از APIهای توسعه‌دهنده آگاه باشید زیرا بسیاری از آنها مستقیماً به رابط‌های HAL زیرین نقشه می‌دهند و می‌توانند اطلاعات مفیدی در مورد پیاده‌سازی درایورها ارائه دهند.
  • بایندر IPC . مکانیسم ارتباط بین فرآیندی Binder (IPC) به چارچوب برنامه اجازه می دهد تا از مرزهای فرآیند عبور کند و به کد خدمات سیستم اندروید فراخوانی کند. این APIهای چارچوب سطح بالا را قادر می سازد تا با سرویس های سیستم اندروید تعامل داشته باشند. در سطح چارچوب برنامه، این ارتباط از توسعه دهنده پنهان است و به نظر می رسد که چیزها "فقط کار می کنند".
  • خدمات سیستمی سرویس‌های سیستم اجزای ماژولار و متمرکزی هستند مانند مدیر پنجره، سرویس جستجو یا مدیر اعلان. عملکردی که توسط APIهای چارچوب برنامه در معرض دید قرار می گیرد، با سرویس های سیستم برای دسترسی به سخت افزار زیربنایی ارتباط برقرار می کند. اندروید شامل دو گروه سرویس است: سیستم (مانند مدیر پنجره و مدیر اعلان) و رسانه (سرویس های مربوط به پخش و ضبط رسانه).
  • لایه انتزاعی سخت افزاری (HAL) . یک HAL یک رابط استاندارد برای پیاده سازی فروشندگان سخت افزار تعریف می کند، که اندروید را قادر می سازد تا در مورد پیاده سازی درایورهای سطح پایین تر، آگنوستیک باشد. استفاده از HAL به شما این امکان را می دهد که بدون تأثیرگذاری یا اصلاح سیستم سطح بالاتر، عملکرد را پیاده سازی کنید. پیاده سازی های HAL در ماژول ها بسته بندی شده و توسط سیستم اندروید در زمان مناسب بارگذاری می شوند. برای جزئیات، به لایه انتزاعی سخت افزار (HAL) مراجعه کنید.
  • هسته لینوکس . توسعه درایورهای دستگاه شما شبیه به توسعه یک درایور دستگاه لینوکس معمولی است. اندروید از نسخه ای از هسته لینوکس با چند افزودنی خاص مانند Low Memory Killer (سیستم مدیریت حافظه که در حفظ حافظه تهاجمی تر است)، wake lock (یک سرویس سیستم PowerManager )، درایور Binder IPC و سایر ویژگی های مهم استفاده می کند. برای یک پلت فرم جاسازی شده موبایل این اضافات در درجه اول برای عملکرد سیستم هستند و بر توسعه درایور تأثیری ندارند. شما می توانید از هر نسخه ای از هسته تا زمانی که از ویژگی های مورد نیاز پشتیبانی می کند (مانند درایور بایندر) استفاده کنید. با این حال، توصیه می کنیم از آخرین نسخه هسته اندروید استفاده کنید. برای جزئیات، به ساخت هسته ها مراجعه کنید.

زبان تعریف رابط HAL (AIDL/HIDL)

Android 8.0 چارچوب سیستم عامل اندروید (در پروژه ای به نام Treble ) را بازسازی کرد تا به روز رسانی دستگاه ها به نسخه جدید اندروید را برای سازندگان آسان تر، سریع تر و کم هزینه تر کند. در این معماری جدید، زبان تعریف رابط HAL (HIDL، تلفظ "hide-l") رابط بین HAL و کاربران آن را مشخص می‌کند و امکان جایگزینی چارچوب اندروید را بدون بازسازی HAL‌ها فراهم می‌کند. در اندروید 10، ویژگی های HIDL در AIDL گنجانده شد. از آن زمان، HIDL منسوخ شده است و فقط توسط زیرسیستم هایی استفاده می شود که هنوز به AIDL تبدیل نشده اند.

Treble پیاده‌سازی فروشنده (نرم‌افزار سطح پایین‌تر و ویژه دستگاه را که توسط سازندگان سیلیکون نوشته شده است) از چارچوب سیستم عامل اندروید از طریق یک رابط فروشنده جدید جدا می‌کند. فروشندگان یا سازندگان SOC یک بار HAL ها را می سازند و آنها را در یک پارتیشن /vendor روی دستگاه قرار می دهند. فریم ورک، در پارتیشن خودش، می تواند با یک به روز رسانی هوای (OTA) بدون کامپایل مجدد HAL ها جایگزین شود.

تفاوت بین معماری قدیمی اندروید و معماری فعلی مبتنی بر IDL در استفاده از رابط فروشنده است:

  • در Android 7.x و نسخه‌های قبلی، هیچ رابط فروشنده رسمی وجود ندارد، بنابراین سازندگان دستگاه باید بخش‌های زیادی از کد Android را برای انتقال دستگاه به نسخه جدیدتر Android به‌روزرسانی کنند:

    شکل 2. محیط به روز رسانی قدیمی اندروید
  • در اندروید 8.0 و بالاتر، یک رابط فروشنده پایدار جدید دسترسی به بخش‌های خاص سخت‌افزار اندروید را فراهم می‌کند، بنابراین سازندگان دستگاه‌ها می‌توانند نسخه‌های جدید اندروید را صرفاً با به‌روزرسانی چارچوب سیستم‌عامل Android ارائه دهند - بدون نیاز به کار اضافی از سوی سازندگان سیلیکون:

    شکل 3. محیط به روز رسانی فعلی اندروید

همه دستگاه‌های جدیدی که با اندروید ۸.۰ و بالاتر راه‌اندازی می‌شوند می‌توانند از معماری جدید بهره ببرند. برای اطمینان از سازگاری رو به جلو پیاده‌سازی‌های فروشنده، رابط فروشنده توسط مجموعه تست فروشنده (VTS) اعتبارسنجی می‌شود، که مشابه مجموعه تست سازگاری (CTS) است. می‌توانید از VTS برای خودکار کردن آزمایش هسته HAL و OS در معماری‌های قدیمی و فعلی اندروید استفاده کنید.

منابع معماری

برای جزئیات بیشتر در مورد معماری اندروید، بخش های زیر را ببینید:

  • انواع HAL HAL های بایندر شده، گذرا، همان فرآیند (SP) و قدیمی را توصیف می کند.
  • ایدل . مستنداتی در مورد AIDL، چه به طور کلی استفاده شود یا به عنوان رابط HAL.
  • HIDL (عمومی) . حاوی اطلاعات کلی در مورد رابط بین HAL و کاربران آن است.
  • HIDL (C++) . حاوی جزئیاتی برای ایجاد پیاده سازی های C++ از رابط های HIDL است.
  • HIDL (جاوا) . حاوی جزئیاتی در مورد Java frontend برای رابط های HIDL است.
  • ConfigStore HAL . APIهایی را برای دسترسی به موارد پیکربندی فقط خواندنی که برای پیکربندی چارچوب Android استفاده می‌شوند، توصیف می‌کند.
  • پوشش درختی دستگاه جزئیات استفاده از همپوشانی درختی دستگاه (DTOs) را در Android ارائه می دهد.
  • کیت توسعه بومی فروشنده (VNDK) . مجموعه ای از کتابخانه های انحصاری فروشنده را برای اجرای HAL های فروشنده توصیف می کند.
  • شیء رابط فروشنده (VINTF) . اشیایی را توصیف می کند که اطلاعات مربوطه را در مورد یک دستگاه جمع می کند و آن اطلاعات را از طریق یک API قابل پرس و جو در دسترس قرار می دهد.
  • SELinux برای اندروید 8.0 . جزئیات تغییرات و سفارشی سازی های SELinux.

علاوه بر منابع موجود در این سایت، اعضای تیم Treble با ایجاد تعادل در یک اکوسیستم نرم افزاری فعال از سهامداران توزیع شده در سطح جهانی، Treble: به روز رسانی های سریع نرم افزار را منتشر کردند. مقاله برای اعضای ACM رایگان است و غیرعضوها می توانند چکیده را خریداری یا مطالعه کنند.