Google 致力于为黑人社区推动种族平等。查看具体举措
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Архитектура Android

Архитектура системы Android содержит следующие компоненты:

Обзор архитектуры системы Android
Рисунок 1. Архитектура системы Android
  • Рамки приложения . Фреймворк приложения чаще всего используется разработчиками приложений. Как разработчик оборудования вы должны знать об API разработчика, поскольку многие из них напрямую связаны с базовыми интерфейсами HAL и могут предоставить полезную информацию о реализации драйверов.
  • Связующее МПК . Механизм Binder Inter-Process Communication (IPC) позволяет платформе приложения пересекать границы процессов и вызывать код системных служб Android. Это позволяет интерфейсам API высокого уровня взаимодействовать с системными службами Android. На уровне фреймворка приложения эта коммуникация скрыта от разработчика, и кажется, что все «просто работает».
  • Системные услуги . Системные службы представляют собой модульные специализированные компоненты, такие как диспетчер окон, служба поиска или диспетчер уведомлений. Функциональные возможности, предоставляемые API-интерфейсами платформы приложений, взаимодействуют с системными службами для доступа к базовому оборудованию. Android включает в себя две группы служб: системные (такие как диспетчер окон и диспетчер уведомлений) и мультимедийные (службы, участвующие в воспроизведении и записи носителей).
  • Уровень аппаратной абстракции (HAL) . HAL определяет стандартный интерфейс для реализации поставщиками оборудования, что позволяет Android не зависеть от реализаций драйверов нижнего уровня. Использование HAL позволяет вам реализовать функциональность, не затрагивая и не изменяя систему более высокого уровня. Реализации HAL упаковываются в модули и загружаются системой Android в соответствующее время. Подробнее см. Уровень аппаратной абстракции (HAL) .
  • Ядро Linux . Разработка драйверов устройств аналогична разработке типичного драйвера устройства Linux. Android использует версию ядра Linux с несколькими специальными дополнениями, такими как Low Memory Killer (система управления памятью, которая более агрессивно сохраняет память), блокировки пробуждения (системная служба PowerManager ), драйвер Binder IPC и другие важные функции. для мобильной встроенной платформы. Эти дополнения предназначены в первую очередь для функциональности системы и не влияют на разработку драйверов. Вы можете использовать любую версию ядра, если она поддерживает необходимые функции (например, драйвер связывания). Однако мы рекомендуем использовать последнюю версию ядра Android. Подробнее см. Сборка ядер .

Язык определения интерфейса HAL (HIDL)

В Android 8.0 была переработана архитектура Android OS (в проекте, известном как Treble ), чтобы производителям было проще, быстрее и дешевле обновлять устройства до новой версии Android. В этой новой архитектуре язык определения интерфейса HAL (HIDL, произносится как «hide-l») определяет интерфейс между HAL и его пользователями, позволяя заменять платформу Android без перестройки HAL.

HIDL отделяет реализацию поставщика (программное обеспечение нижнего уровня для конкретного устройства, написанное производителями микросхем) от платформы ОС Android через новый интерфейс поставщика. Поставщики или производители SOC создают HAL один раз и помещают их в раздел /vendor на устройстве; Затем фреймворк в его собственном разделе можно заменить обновлением по беспроводной сети (OTA) без перекомпиляции HAL.

Разница между устаревшей архитектурой Android и текущей архитектурой на основе HIDL заключается в использовании интерфейса поставщика:

  • В Android 7.x и более ранних версиях не существует формального интерфейса поставщика, поэтому производители устройств должны обновлять большие части кода Android, чтобы перевести устройство на более новую версию Android:

    Рисунок 2. Устаревшая среда обновления Android
  • В Android 8.0 и более поздних версиях новый стабильный интерфейс поставщика обеспечивает доступ к аппаратным частям Android, поэтому производители устройств могут выпускать новые версии Android, просто обновляя платформу ОС Android - без дополнительной работы со стороны производителей микросхем:

    Рисунок 3. Текущая среда обновления Android

Все новые устройства, запускаемые с Android 8.0 и выше, могут использовать преимущества новой архитектуры. Чтобы гарантировать прямую совместимость реализаций поставщика, интерфейс поставщика проверяется набором тестов поставщика (VTS) , который аналогичен набору тестов совместимости (CTS) . Вы можете использовать VTS для автоматизации тестирования HAL и ядра ОС как в устаревшей, так и в текущей архитектуре Android.

Ресурсы по архитектуре

Подробнее об архитектуре Android см. В следующих разделах:

  • Типы HAL . Описывает бинарные, сквозные, одинаковые (SP) и унаследованные HAL.
  • HIDL (Общий) . Содержит общую информацию об интерфейсе между HAL и его пользователями.
  • HIDL (C ++) . Содержит сведения о создании реализаций C ++ интерфейсов HIDL.
  • HIDL (Java) . Содержит подробную информацию о внешнем интерфейсе Java для интерфейсов HIDL.
  • ConfigStore HAL . Описывает API-интерфейсы для доступа к элементам конфигурации, доступным только для чтения, которые используются для настройки платформы Android.
  • Наложения дерева устройств . Предоставляет подробную информацию об использовании наложений дерева устройств (DTO) в Android.
  • Комплект разработчика встроенного ПО (VNDK) . Описывает набор эксклюзивных для поставщика библиотек для реализации поставщиков HAL.
  • Объект интерфейса поставщика (VINTF) . Описывает объекты, которые собирают релевантную информацию об устройстве и делают эту информацию доступной через запрашиваемый API.
  • SELinux для Android 8.0 . Подробно об изменениях и настройках SELinux.

В дополнение к ресурсам на этом сайте, члены команды Treble опубликовали Treble: Быстрые обновления программного обеспечения путем создания равновесия в активной программной экосистеме глобально распределенных заинтересованных сторон . Статья бесплатна для членов ACM, а лица, не являющиеся членами ACM, могут приобрести или прочитать аннотацию.