نمای کلی لایه انتزاعی سخت افزار (HAL).

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

در اندروید 8.0 و بالاتر، لایه‌های سطح پایین‌تر دوباره نوشته می‌شوند تا معماری جدید و ماژولارتری اتخاذ کنند. دستگاه‌های دارای Android نسخه 8.0 و بالاتر باید از HAL‌های نوشته شده در HIDL پشتیبانی کنند، به استثنای چند مورد که در زیر ذکر شده است. این HAL ها را می توان باندریزه یا عبوری کرد. در اندروید 11، HAL های نوشته شده با AIDL نیز پشتیبانی می شوند. تمام AIDL HAL ها باندریزه می شوند.

  • HAL های بایندر شده HAL ها به زبان تعریف رابط HAL (HIDL) یا زبان تعریف رابط اندروید (AIDL) بیان می شوند. این HAL ها جایگزین HAL های معمولی و قدیمی می شوند که در نسخه های قبلی اندروید استفاده می شدند. در یک HAL Binderized، چارچوب Android و HAL ها با استفاده از فراخوانی ارتباط بین فرآیندی (IPC) با یکدیگر ارتباط برقرار می کنند. همه دستگاه‌هایی که با Android نسخه ۸.۰ یا جدیدتر راه‌اندازی می‌شوند باید فقط از HAL‌های بایندر شده پشتیبانی کنند.
  • HAL های عبوری یک HAL معمولی یا قدیمی که با HIDL پیچیده شده است. این HAL ها HAL های موجود را می پوشانند و می توانند HAL را در حالت binderized و همان فرآیند (عبور) خدمت کنند. دستگاه‌هایی که به Android 8.0 ارتقا می‌یابند می‌توانند از HAL‌های عبوری استفاده کنند.

الزامات حالت HAL

دستگاه عبور صحافی شده
راه اندازی با اندروید 8.0 HAL های فهرست شده در HAL های عبور باید گذر باشد. همه HAL های دیگر بایندر شده هستند (از جمله HAL هایی که پسوند فروشنده هستند).
به اندروید 8.0 ارتقا دهید HAL های فهرست شده در HAL های عبور باید گذر باشد. HAL های فهرست شده در HAL های Binderized باید بایندر شوند.
تمام HAL های دیگر ارائه شده توسط تصویر فروشنده می توانند در حالت عبور یا صحافی باشند. در یک دستگاه کاملاً مطابق با Treble، همه اینها باید صحافی شوند.

HAL های بایندر شده

Android به HALS زیر نیاز دارد تا در همه دستگاه‌های Android صرفنظر از اینکه دستگاه‌های راه‌اندازی هستند یا دستگاه‌های ارتقادهنده، صحافی شوند:

  • android.hardware.biometrics.fingerprint@2.1 . جایگزین fingerprintd می شود که دیگر در اندروید 8.0 نیست.
  • android.hardware.configstore@1.0 . جدید در اندروید 8.0.
  • android.hardware.dumpstate@1.0 . رابط اصلی ارائه شده توسط این HAL قابل تغییر نیست و تغییر کرده است. به همین دلیل، dumpstate_board باید مجدداً در یک دستگاه معین پیاده‌سازی شود (این یک HAL اختیاری است).
  • android.hardware.graphics.allocator@2.0 . لازم است در Android 8.0 صحافی شود، بنابراین لازم نیست توصیفگرهای فایل بین فرآیندهای قابل اعتماد و غیرقابل اعتماد به اشتراک گذاشته شوند.
  • android.hardware.radio@1.0 . جایگزین رابط ارائه شده توسط rild می شود که در فرآیند خود زندگی می کند.
  • android.hardware.usb@1.0 . جدید در اندروید 8.0.
  • android.hardware.wifi@1.0 . جدید در Android 8.0، جایگزین کتابخانه قدیمی Wi-Fi HAL می شود که در system_server بارگیری شده بود.
  • android.hardware.wifi.supplicant@1.0 . یک رابط HIDL روی فرآیند wpa_supplicant موجود.

توجه : Android رابط‌های HIDL زیر را ارائه می‌کند که همیشه در حالت binderized خواهند بود: android.frameworks.* ، android.system.* و android.hidl.* (به جز android.hidl.memory@1.0 همانطور که در زیر توضیح داده شد).

HAL های عبوری

Android به HAL‌های زیر نیاز دارد تا در همه دستگاه‌های Android بدون توجه به اینکه دستگاه‌های راه‌اندازی هستند یا دستگاه‌های ارتقادهنده، در حالت عبور باشند:

  • android.hardware.graphics.mapper@1.0 . حافظه را به فرآیندی که در آن زندگی می کند نقشه می دهد.
  • android.hardware.renderscript@1.0 . موارد را در یک فرآیند (معادل openGL ) پاس می کند.

همه HAL هایی که در بالا ذکر نشده اند باید برای دستگاه های پرتاب صحافی شوند.

HALهای همان فرآیند

HAL های یکسانی (SP-HAL) همیشه در همان فرآیندی که در آن استفاده می شوند باز می شوند. آنها شامل تمام HAL هایی هستند که در HIDL بیان نشده اند و همچنین برخی از آنها که بایندر نشده اند. عضویت در مجموعه SP-HAL بدون استثنا فقط توسط Google کنترل می شود.

SP-HAL ها شامل موارد زیر است:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (ارائه شده توسط سیستم اندروید، همیشه از طریق عبور)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

HAL های معمولی و قدیمی

HAL های معمولی (منسوخ شده در Android 8.0) رابط هایی هستند که با یک رابط کاربری باینری برنامه خاص با نام و نسخه (ABI) مطابقت دارند. بخش عمده ای از رابط های سیستم اندروید ( دوربین ، صدا ، حسگرها و غیره) به شکل HAL های معمولی هستند که تحت عنوان hardware/libhardware/include/hardware تعریف می شوند.

HAL های قدیمی (که در اندروید 8.0 نیز منسوخ شده اند) رابط هایی هستند که قبل از HAL های معمولی وجود دارند. چند زیرسیستم مهم (Wi-Fi، لایه رابط رادیویی و بلوتوث) HAL های قدیمی هستند. در حالی که هیچ روش یکنواخت یا استانداردی برای توصیف یک HAL قدیمی وجود ندارد، هر چیزی که مربوط به اندروید 8.0 باشد و یک HAL معمولی نباشد، یک HAL قدیمی است. بخش‌هایی از برخی از HAL‌های قدیمی در libhardware_legacy قرار دارند، در حالی که بخش‌های دیگر در سرتاسر پایگاه کد قرار دارند.