creator cover Android | Михаил Белый
Android | Михаил Белый

Android | Михаил Белый 

Все про Android

43subscribers

46posts

goals1
$15.27 of $1 375 raised
Поплыву на остров Ко Мадсум кормить диких кабанчиков

About

Авторский блог про карьеру в IT в роли Мобильного разработчика (Android, Kotlin, Multiplatform). Здесь публикуются статьи на разные темы.
Заходи в карьерный роадмап в Notion
Подписывайся на Telegram канал
Подписывайся на YouTube канал
Подписывайся на Жалкий детский уровень и залетай в чат с записями собеседований
Посты по темам:

Как разделить Android-приложение на Google и Huawei с помощью Flavors

Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.

Год без Notion

Год назад ноушен покинул нас и перестал работать в России. Импульсивный алармизм в телеграм каналах начался еще за 2 недели до его ожидаемого ухода: как же быть, куда бежать.
Откуда ни возьмись повылезали десятки альтернатив и потенциальных убийц. Я потыкал штук 20. Почти все утонули у берега. Выделяется только обсидиан. Но у него другая философия. Возможно, что я дед, закрытый ко всему новому, но ноушен продолжаю пользовать, как и раньше. Если водить – то мерседес.
Это не доставляет особых неудобств, потому что я несколько лет назад переехал на ПМЖ в Виртуальные Приватные Нидерланды. А в Россию возвращаюсь, чтобы зайти на госуслуги или оплатить покупку на маркете.
Я использую браузерную версию ноушена, приложения для мака, айфона и андроида. Помимо роадмапа у меня там отслеживание тренировок, рецепты, планы поездок, сценарии, черновики и другая интерактивная информация.
Все прочие недоступные сервисы, когда открываешь их без впн, просто показывают заглушку, что не из той страны постучался. Ноушен делает больше – сразу разлогинивает на всех устройствах. Приходится заново входить. Пару раз наплодил так лишних рабочих пространств. Ну и спелл чекер включается, приходится отключать.
Я даже не знаю что это такое

Как работать с Plurals-ресурсами в Android

Plurals – это строковый ресурс, который подставляет правильную словоформу в фразе с числом. Набор форм зависит от языка: где-то хватает «one» и «other», а в сложных локалях есть «few», «many», иногда «zero» и «two». Система сама решает, какую форму подставить: «1 день», «2 дня», «5 дней». Благодаря этому интерфейс звучит естественно на любом языке, без ручной склейки строк и поломки грамматики.
Выбор используемой строки осуществляется на основе грамматической необходимости. Правила могут быть сложными для определенного языка и количества. Поэтому Android предоставляет методы для выбора подходящего ресурса.
Ни на одном проекте я не видел правильного применения plurals. Чаще всего разработчики обманываются буквальной трактовкой форм: zero не означает только число 0, а two не подходит только для числа 2. Если не опираться на plurals, получить верную фразу будет невозможно. Поэтому я решил исследовать эту тему в новом видео.

Как менять иконку запуска Android-приложения

Пользователям приложения можно предоставить возможность выбирать иконку лаунчера. Это делается для кастомизации, сезонных акций или платного функционала закрытого пейволом.
Реализовать можно через Activity Alias – единственный универсальный механизм подмены иконки. Они должны быть заранее импортированы в проект. Адаптивные векторы с атрибутом <monochrome> будут перекрашиваться в цвета обоев, независимо от выбранного иконки.
Aliases (псевдонимы, точки входа) прописываются в манифесте и ссылаются на существующую активити. Они могут иметь собственный интент-фильтр MAIN+LAUNCHER, иконки и другие параметры. Операционная система найдет псевдоним при парсинге манифеста и добавит ярлык в лаунчер. Чтобы в лаунчере отображалась только одна иконка – один алиас включаем (android:enabled="true"), остальные отключаем.

Баги из рабочей практики

Самая непредсказуемая часть любого приложения – человек за клавиатурой. Нам предопределено хлебать смузи и думать о вечном, сидя на безусловном базовом мешке. А мы ломаем машинные процессы из-за своей иррациональности.
Но пока, именно благодаря ошибкам я открыл для себя автоматические тесты, обязательное код-ревью и канареечную раскатку.
Как баги всплывают на поверхность:
• отловил самостоятельно в процессе разработки
• упал автоматический тест
• не прошли код-ревью
• тестировщик вернул задачу
• прилетело из крэшлитики
• аудит или отчет безопасников
• обратная связь от пользователей
Также пришлось поработать над двумя соцсетями. В каждой был подсайт или публичный топик, где юзеры описывали баги. Эти посты превращались в джира-тикеты. На одной работе был канал в слаке, куда сыпались оценки с отзывами из Google Play. Если ставили одну звезду, кабаныч тегал нас под сообщением.

Свистоперделки

Есть категория постов в технических тг-каналах, полезность которых стремится к отрицательной. Речь об ископаемых гитхаб-репозиториях с какой-нибудь юайной свистоперделкой: ленточки, стильные прогресс-бары, кнопка с прогрессом, виджеты разблокировки и прочее и прочее и прочее.
Востребованы ли свистоперделки в коммерческой разработке? Никак нет. Даром не нужны. Все как-то обходятся стандартными вьюхами, собственной библиотекой компонентов и нативными анимациями.
Можно пофантазировать, что когда-нибудь твой менеджер сойдет с ума и вместо обычной кнопки-сосиски захочет переливающийся градиентом фаербол, с вылетающими при клике конфетти. И вот, с сохраненного поста сдувается пыль, усилия, ранее затраченные на переход по ссылке, чтение ридми и менеджмент закладок, окупаются. Но, почти наверняка, такого не будет. Время потеряно безвозвратно. Внимание ушло в никуда.
Свистоперделки хороши только для заполнения звенящей пустоты контентной ленты, когда нет идей для постов. При этом подобные публикации развивают цифровой накопительный синдром и эксплуатируют человеческий страх упустить важное. Ты либо пересылаешь их себе, чтобы никогда больше не открыть, либо вырабатываешь баннерную слепоту и просто пролистываешь.

Как делать то, что не хочется

В жизни полно важных дел, которые даже начинать не хочется – тренировка, статья, презентация, резюме, план поездки. Их объединяет одно – желание отложить на потом. Если откладывать уже некуда – находится любой повод для промедления: ютуб, твиттер, телеграм, рилсы, уборка, шопинг, сплетни. Но рано или поздно придется сдвинуться с мертвой точки. От себя не убежать.
Чтобы сделать дело и гулять смело, надо разобраться, что нас стопорит. Никто не появился на свет бездействовать.
Анализ будет таким:
• Почему дела избегаются
• Почему пробуется все, кроме взять и сделать
• Как мозг ранжирует дела
• Как понять, что дело важное
• Как выполнить дело
• Как выполнить следующее дело

Почему дела избегаются

Как делать Android MVP-инди-пет-проект

Когда надо заделать Android-приложение с нуля, как минимально жизнеспособный продукт (MVP) или для индивидуального проекта (инди, пет), главная цель – быстро выпустить рабочий прототип, протестировать гипотезы на первых пользователях, выйти на рынок и получить обратную связь. В отличие от долгоживущих энтерпрайзов, масштабируемость и поддерживаемость мвп не так важна, а цена ошибок не высока.
Половина приложений отправится в утиль в следующие год-два, остальные будут улучшаться позже. Это значит, что на ранних этапах почти все устоявшиеся паттерны превратятся в антипаттерны. Потому что сожрут много времени и внимания. Выгоднее их отвергнуть как избыточные, а ресурс сохранить. Что именно можно пропустить:
Многомодульность. Хватит одного модуля :app. Никто не запрещает раскладывать классы по папкам и переиспользовать. Конфигурация Gradle в моменте усложняет проект и увеличивает сроки разработки, особенно с >= 2 модулями на каждую фичу.
Чистая архитектура. Кажется, мы дожили до времен, когда даже на уважаемых конференциях дядю боба с его луковицей выписывают из повестки. Сложная и многослойная архитектура часто не дает реальных преимуществ, а лишь привносит лишние церемонии на свое техобслуживание. Доходит до того, что разработчики пишут плагин для IDE, который им генерирует 20 классов на фичу.

Corporate boy

Работа в корпорации отличается от работы в так любимых мной мелких студиях и стартапах-берлогах. В основном масштабом. Больше процессов, людей и командного взаимодействия. Меньше возможностей зашкериться и прохлаждаться.
Чтобы тупить поменьше и вдуплять побольше, приходится учиться на ходу. Иначе накапливается неэффективность, происходит мискоммуникация и едет кукуха. В какой-то момент я решил вести списочек таких ситуаций. Каждый пункт – мой конкретный факап, который произошел однажды и больше не повторялся.
После увольнения список пополняться перестал. Будет лежать здесь:
• Всегда должен быть установлен будильник. А лучше два. Тогда вероятность проспать дейли уменьшается.
• Работать намного приятнее, если утром принять душ, умыться, потренить, надеть чистое белье и плотно позавтракать.
• Чего нет в календаре – нет и в реальной жизни. Все рабочие события должны быть туда добавлены.

Правила съема

Случился пятый переезд на очередную съемную квартиру в Москве. В среднем меняю место жительства каждые 1.5 года. Не во всех сферах жизни мне нравится постоянство.
Я уже пожил в 7 районах Москвы и в самых разных квартирах: от клоповника в сталинке до апартаментов в клубном доме. Поэтому на правах калача тертого расскажу, что из себя представляет рынок аренды недвижимости в июне 2025 и как айтишнику работящему жить поживать бобра наживать.
Для поиска имеем 3 площадки: циан, авито и яндекс аренда. Первый является абсолютным монополистом. Как искать работу на хедхантере и продавать хлам на авито. На других площадках выхлоп слабый.
Далее мы вынуждены отталкиваться от требований. Если хотим полную загрузку: внутри мкада, не под снос, не 1 этаж, 40+ квадратов, дизайнерский/косметический ремонт, изолированная спальня, гардеробная, кондей, холодильник, посудомойка, стиралка, много розеток, комнатная мебель и кухонный гарнитур, то ценник будет никак не ниже 70k/мес.
Опыт показывает, что есть только один шанс снять такую квартиру – настроить на циане поиск с мгновенными уведомлениями о появлении новых квартир. Есть даже
Subscription levels1

Жалкий детский уровень

$1.38 per month
• Бесконечный респект и признательность 
• Ранний доступ к видео и воркшопам
• Отдельный топик в телеграм-чате с записями реальных Android-собеседований
• Отдельный топик с автоматическими новостями про Android-разработку
+ chat
Go up