tgoop.com/dev_easy_notes/256
Last Update:
У меня на кухне, как у многих, стоит Алиса. Как голосовой помощник она естественно используется только для двух вещей: включить нужную мне музыку или засечь таймер. Мне нужные только две эти функции, ничего более. Однако последнее время, каждый раз, попросив, засечь таймер, она также начинает мне предлагать либо подкаст, либо книгу, либо оформить "супер выгодную" подписку.
С одной стороны понятно, что яндекс повторяет историю с неумелой и абсолютно несуразной рекламой в стиле распространения яндекс бара. С другой стороны если посмотреть на это глубже, но становится очевидна одна проблема, которая выходит за рамки умного устройства.
Современное программное обеспечение, дохера на себя берет, вместо того, чтобы беспрекословно и молча выполнять поставленные задачи. Это все большая подводка, чтобы да, опять пожаловаться на Gradle, а точнее на разработчиков agp.
В этот раз я жалуюсь не просто так, а потому что я из-за этого не смог сделать рабочую задачу. История такая: я на работе занимался допиливанием и усовершенствованием импакт анализа. Я не будут описывать подробности, советую прочитать если вдруг не видели, я как мог, старался сделать статью не скучной. В статье я не указал на один очень противный недостаток реализации. В текущей реализации нельзя получить Coverage самих тестов. Другими словами, если меняются строчки в самом тесте, импакт анализ его не запустит.
Почему так? Да потому что agp, который использует под капотом jacoco, решил что ему виднее какой код нужно модифицировать для сбора Coverage, а какой нет. Как я только не пытался заставить его модифицировать код тестов, все четно.
Вот в чем причина, Jacoco изначально был как сторонний плагин, если хочешь собирать Coverage, подключаешь его, настраиваешь как тебе нужно и он работает. Однако разработчики agp решили нам "упростить" жизнь и запихали работу с jacoco к себе внутрь и теперь как бы сами конфигурируют его как нужно. Для типичного флоу хватает более чем, но как только ты пытаешься отойти от базового использования – пожалуйте нахуй.
И вот казалось бы, ну нахера, нахера они полезли куда их не просят? Я сам разберусь как мне нужно настроить JaСoСo, чтобы он вызывался как нужно мне, а не как нафантазировали себе разрабы agp. У Gradle есть система Input Output для Task, которую они (gradle) сейчас очень активно форсят и это круто. Мне кажется каждый плагин, каждая Task в Gradle так и должна работать. Вот я что-то ей даю на вход, и вот я что-то ожидаю на выходе. В какой момент Gradle вызовет эту таску пофиг, пусть сам разбирается, мне важен только результат.
Так должно работать в теории, но в реальности же видим agp который представляет собой черный ящик. Что идет на вход, а что получаем на выходе почти никогда не понятно. Если попытаешься залезть внутрь, чтобы разобраться, то код Agp как дементр – заберет у тебя все положительные эмоции. В конечном итоге разрабы agp портят жизнь как себе, потому как получается монструозный кусок говна в который тяжело вносить изменения, так и пользователям, потому как если отойти от типичного флоу программы, все ломается и вообще начинает работать неадекватно.
Если вы делаете решения для разрабов, то делайте инструменты, которые делают что-то одно хорошо. Не пытайтесь сделать инструмент который дофига на себя берет. Хороший пример либы Вортона, у него в первой версии же тоже все под капотом само конфигурировалось и даже была завязка на Gson. Однако Жека то умный, он сразу понял что это путь в никуда и теперь у того же Retrofit куча настроек на входе. И что имеем теперь? Либы Вортона использует вся индустрия, потому что они не делают ничего лишнего, а что нужно делают настолько хорошо насколько возможно.
BY Dev Easy Notes
Share with your friend now:
tgoop.com/dev_easy_notes/256