February 27, 2019

Fire and motion 2019

Немного реалий андроид программирования.

Сегодня понадобилось сделать тест работающий непосредственно на устройстве. (Никогда, слышите никогда не вводите зависимости между дествительно важным функционалом и любыми нативными API).

Сделал по гайду. Впилил зависимость androidx.test:runner:1.1.0, повесил @RunWith(AndroidJUnit4.class) на тест. Тут мне говорят ахтунг, 1.1.0 устарел, надо на 1.1.1 обновляться. Обновился, иду в код. Там снова ахтунг, androidx.test.runner.AndroidJUnit4 устарел, надо androidx.test.ext.junit.runners.AndroidJUnit4. Поправил, одна беда - такого класса нет. Иду на SO, там советуют androidx.test.ext:junit:1.1.0. Ну я то стаинг ап-ту-дейт, сразу на 1.1.1 поправил. Билдим - всё наёбывается, androidx.test.ext:junit:1.1.1 отсутсвует. Вдох, выдох, всё откатываем на 1.1.0. Билдим, билдицо. Запускаем тест - всё наёбывается, 2 экрана ошибок. Ещё глубже вдох, помедленнее выдох чтоб в голову не дало. Возвращаем аннотацию androidx.test.runner.AndroidJUnit4. Работает!!!

А теперь 2 интересные детали. Deprecation warning можно сапреснуть только во всём классе сразу. Gradle dependency inspection нельзя сапреснуть вообще, только выключить полностью.

Интересно, зачем выпускать несовместимое обновление с изменением в 3 числе версии? Зачем рекомендовать миграцию с работающего класса на сломаный? Зачем заставлять делящихся прибылью разработчиков выбирать между кучей нерелевантных ворнингов и риском пропустить критичное изменение?

Классики проясняют Fire And Motion.

Tags: TG repost thoughts