ProGuard-конфиги удобно править с помощью агентов
Чем меньше какая-то штука в проекте похожа на обычный код и чем больше на конфигурацию, тем более вероятно, что все будут заниматься ей спустя рукава. Разбираться в ней — это какой-то отдельный неприоритетный скилл, которого у большинства не хватает.
В Android это и Gradle-конфиги, и настройка CI, и даже какой-нибудь волшебный DI-фреймворк типа Dagger в коде. Но среди таких штук у меня на первом месте ProGuard/R8-конфиги. 🪖
Для неандроидеров: это набор правил, определяющих, как обфусцировать, минифицировать и оптимизировать код после сборки. От того, как вы эти конфиги напишете, зависят длительность этого процесса, стабильность приложения и его размер. Ваши правила ещё и мёржатся с правилами из всех зависимостей — кошмар.
Честно признаюсь, я ни разу не видел нормального сетапа, потому что это прям олицетворение поговорки «работает — не трогай». Чудовищно неэффективная и неприятная история. Меняешь какие-то правила — что-то может отломаться в непонятных местах, и узнаешь ты об этом слишком поздно. Надо регрессить и профайлить.
И как же прекрасно, что мы живём в мире с агентами. Во время работы R8 генерит много артефактов, в которых расписано, как прошёл маппинг. Вначале собираем бейзлайн, затем пускаем агента перепроверять, не дублируют ли наши правила те, что транзитивно пришли из библиотек. Он зачищает лишнее и с помощью скриптов смотрит есть ли влияние на артефакты. Дальше пинаем его, чтобы шёл по всем оставшимся правилам, пытался сузить их скоупы, переписать или удалить их, а также декомпозировать по группам. И пусть продолжает в цикле до тех пор, пока влияния на бейзлайн либо всё ещё не будет, либо не станет очевидно положительным. Самое страшное, что при необходимости он ещё и может залезть в aar файлы библиотек или итоговый бандл, чтобы сделать какие-то выводы. А мы так не можем, давайте признаемся.
В этом кейсе у нас есть понятный фидбэк-луп, благодаря которому агент может проверить, что ничего не сломал. Очевидный, казалось бы, юзкейс, но у меня до сих пор случаются моменты озарения, когда я такое замечаю и проворачиваю. Агент пару дней поработал в фоне: как минимум упростил поддержку конфигов, а как максимум ещё и убрал что-то лишнее. Да так, что спать всё ещё можно спокойно.