Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

installd
Служба установщика пакетов

Тип файла: служба

   

Комментарии
Зачем нужен installd
В Android уже есть такой сложный сервис, как PMS, зачем ему еще один демон installd?

Ответ на самом деле очень прост: system_server запускается как системный пользователь, а PMS запускается в system_server, поэтому PMS также является системным пользователем. installd — пользователь root.

USER PID PPID VSIZE RSS WCHAN PC NAME

system 1698 699 2408960 149752 SyS_epoll_ 0000000000 S system_server
root 706 1 9972 2612 unix_strea 0000000000 S /system/bin/installd

Системный пользователь не имеет разрешения на доступ к каталогу приложения. Однако installd как пользователь root может получить доступ к каталогу data/data/, поэтому и существует installd.


Что такое диспетчер пакетов и установщик пакетов?
PackageInstaller — это приложение по умолчанию для Android, предназначенное для интерактивной установки обычного пакета. PackageInstaller предоставляет пользовательский интерфейс для управления приложениями/пакетами. PackageInstaller вызывает действие InstallAppProgress для получения инструкций от пользователя. InstallAppProgress попросит службу диспетчера пакетов установить пакет через installd. Исходный код доступен по адресу <Android Source>/packages/apps/PackageInstaller.

Основная роль демона Installd — получать запросы от службы диспетчера пакетов через сокет домена Linux /dev/socket/installed. installd выполняет ряд шагов для установки APK с правами root.

[Ссылка: https://github.com/android/platform_frameworks_base/blob/master/cmds/installd/commands.c]

Package Manage — это API, который фактически управляет установкой, удалением и обновлением приложений. Когда мы устанавливаем файл APK, диспетчер пакетов анализирует файл пакета (APK) и отображает подтверждение. Когда пользователь нажимает кнопку «ОК», диспетчер пакетов вызывает метод с именем «installPackage» с этими четырьмя параметрами, а именно uri, installFlags, Observer, installPackageName. Менеджер пакетов запускает одну службу с именем «пакет», и теперь в этой службе происходят все нечеткие вещи. Вы можете проверить «PackageInstallerActivity.java» и «InstallAppProgress.java» в исходном коде PackageInstaller. Служба диспетчера пакетов запускается в процессе system_service, а демон установки (installd) запускается как собственный процесс. Оба запускаются во время загрузки системы.

Где хранятся APK-файлы в Android?
а. Предварительная установка APK-файла (например, камеры, календаря, браузера и т. д.) хранится в /system/app/.

б. Пользовательская установка (ApiDemo, Any.do и т. д.) APK хранится в /data/app/.

в. Диспетчер пакетов создает каталог данных /data/data/<имя пакета>/ для хранения базы данных, общих настроек, собственной библиотеки и данных кэша.

Процесс установки APK процесс выполняется в службе диспетчера пакетов.

  • Ожидание
  • Добавить пакет в очередь для процесса установки
  • Определить подходящее место установки пакета
  • Определить установку: Установить/Обновить новую
  • Скопировать файл apk в указанный каталог
  • Определите UID приложения
  • Запросить процесс демона installd
  • оздать каталог приложения и установить разрешения
  • Извлечь dex-код в каталог кэша
  • Отразить последний статус packages.list/system/data/packages.xml
  • Трансляция в систему вместе с названием эффекта от установки полного пакета
  • Intent.ACTION_PACKAGE_ADDED: если новый
  • Intent.ACTION_PACKAGE_REPLACED): случай обновления


    Менеджер пакетов хранит информацию о приложении в трех файлах, расположенных в /data/system.

    1. packages.xml: этот файл содержит список разрешений и пакетов/приложений.

    В этом XML-файле хранятся две вещи:
  • 1. разрешения.
  • 2. пакет (приложение), разрешения хранятся в теге <permissions>.
    Каждое разрешение имеет три атрибута, а именно имя, пакет и защиту.
    Атрибут name имеет имя разрешения, которое мы используем в AndroidManifest.xml, атрибут package указывает разрешение, принадлежащее пакету. В большинстве случаев значением является «android», поскольку тег <permission> содержит разрешения по умолчанию, а защита указывает уровень безопасности.

    Подтеги
  • а. Информация о подписи sigs, атрибут count представляет номер тега сертификата.
  • б. cert содержит ключ сертификации, атрибут index представляет глобальный индекс сертификата. Я обнаружил, что оно увеличивается при установке новых сертификатов вместе с приложением.
  • в. разрешения содержат разрешения, которые разработчик установил в AndroidManifest.xml.

    2. packages.list: это простой текстовый файл, содержащий имя пакета, идентификатор пользователя, флаг и каталог данных. Файл packages.list может обеспечить более быстрый поиск установленных пакетов, поскольку он хранит только важную информацию.

    3. packages-stoped.xml: этот файл содержит список пакетов, состояние которых остановлено.
    Приложения в остановленном состоянии не могут получать никаких широковещательных сообщений.