Как сборка находит код, который приложению не понадобится
Приложение часто собирают не только из собственного кода: в него входят библиотеки с функциями для множества задач. Конкретный проект может использовать лишь небольшую часть этих возможностей, но без дополнительной обработки в сборку попадут и остальные.
Удаление начинается с поиска точек входа — например, запуска приложения и обработчиков действий пользователя. Инструменты сборки анализируют, какие функции доступны из этих точек, и прослеживают связи: если достижимая функция вызывает другую, она тоже нужна. Код, до которого не ведёт ни один такой путь, считают невызываемым и исключают. Этот анализ называют определением достижимости, а удаление неиспользуемых частей — устранением мёртвого кода. В некоторых экосистемах похожее сокращение модулей и функций известно как tree shaking, то есть «встряхивание дерева» зависимостей.
Почему удаление требует осторожности
Не всякая связь видна при сборке. Программа может находить классы по имени во время работы, загружать плагины или вызывать функции через отражение — механизм, позволяющий обращаться к коду косвенно. Анализатор иногда не может доказать, что такая часть не нужна, поэтому её сохраняют или отдельно помечают в настройках. Иначе приложение соберётся успешно, но потеряет функцию, которая обнаруживается только при определённом действии пользователя.
Поэтому проверяют не просто размер файла: важно убедиться, что после сокращения работают нужные сценарии и экраны. Зато удачный анализ убирает не только лишние байты, но и код, который иначе пришлось бы хранить, устанавливать и иногда загружать на устройство. В крупной библиотеке разница может измеряться сотнями мегабайт — при условии, что сборка сумела отличить запас возможностей от действительно нужной логики.






