Когда AndroidManifest.xml считывается операционной системой

Ответ

Файл AndroidManifest.xml считывается системой в нескольких ключевых моментах:

  1. Установка приложения – система парсит манифест для получения базовой информации (permissions, components, package name и т.д.)

  2. Запуск компонентов – перед стартом Activity, Service, BroadcastReceiver или ContentProvider система проверяет их объявление в манифесте.

Пример проверки Activity в коде:

val intent = Intent(this, SomeActivity::class.java)
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
}
  1. Системные события – например, при получении broadcast'а система сверяется с манифестом на предмет зарегистрированных ресиверов.

Важно: манифест читается не полностью при старте приложения, а выборочно по мере необходимости для оптимизации производительности.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Слушай, сейчас разжуем, как система с этим самым AndroidManifest.xml работает. Представь, что это типа паспорта твоего приложения, и система — это такой дотошный мент, который этот паспорт проверяет в самых неожиданных моментах.

Вот основные засечки, где его достают и начинают ковырять:

  1. Установка приложения – это как первая явка в участок. Система распаковывает твой APK и сразу лезет в манифест. Ей надо понять: как зовут пацана (package name), какие у него криминальные наклонности (permissions), и что он вообще умеет делать (components). Без этого в паспортный стол не запишут.

  2. Запуск любой фигни из приложения – вот тут начинается веселье. Допустим, ты хочешь запустить какую-то свою Activity. Система, прежде чем её создать, полезет в манифест и спросит: «А че это за SomeActivity тут у вас? Она у вас зарегистрирована? А то я, бля, таких на улице каждый день вижу — самозванцев». И в коде это выглядит примерно так:

    val intent = Intent(this, SomeActivity::class.java)
    // Система тут втихаря лезет в манифест и ищет эту активность
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent) // Всё ок, паспорт проверили, запускаем
    }
То же самое с сервисами, приёмниками широковещательных рассылок (BroadcastReceiver) и провайдерами контента. Нет записи в манифесте — считай, ты фантом, призрак, тебя не существует. **Доверия ебать ноль**, система просто проигнорит твои потуги.
  1. Разные системные события – вот прилетает, например, сообщение, что батарея сдохла. Система орет на всю округу: «БАТАРЕЯ СДОХЛА!». И тут же листает манифесты всех установленных приложений, смотрит: «А кто тут у меня подписан на эту драму? А, вот ты, хитрая жопа, в манифесте заявил, что хочешь такие ивенты получать. Держи!».

И главный лайфхак, чтобы не охуеть от тормозов: система не грузит этот файл целиком и сразу при старте приложения. Это было бы пиздец как неоптимально. Она читает его выборочно, по кусочкам, только когда реально нужно. Как умный человек ищет ответ в оглавлении книги, а не читает её всю от корки до корки.

Короче, манифест — это твоя главная бюрократическая бумажка в мире Android. Без неё ты хуй с горы, а не приложение.