Invalidate cache & restart
506 subscribers
10 photos
1 video
24 links
Это поможет.

Про Android, собеседования и серые будни.

Автор — @nonewss, Staff Engineer в Reddit & Android GDE
Download Telegram
Сколько весит приложение ?

После полного перехода на AppBundle, стало намного сложнее понять финальный размер приложения в Google Play.

Всэ зависит от ABI, плотности экрана (от котороой зависит выбранные ресурсы) и даже локалей, поддерживаемых на устройстве.
Все они представленны в виде отдельных apk, запакованных в bundle, с использованием bundletool под капотом.


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

bundletool отвечает не только за упаковку, но и за обратную распаковку, которая используется в Google Play.

За пару команд, мы можем раздробить bundle на все apk-шки и узнать вес, в зависимости от ABI, ресурсов или локалей, как показано на картинке.

По статистике, максимальный размер у arm64-v8a с xxxhdpi
👍5
Основы Gradle

Как правило, Gradle, это то, что многие предпочитают избегать. (Не считая добавления зависимостей)

Собственные таски/плагины могут сильно помочь автоматизировать рутину, особенно в больших проектах.

Нашёл довольно неплохой плейлист из 17 коротких видео, который поможет вам разобраться с основами
10👍3👎1
Не одним ViewModel и Jetpack едины

Вчера выложили в open-source фреймворк Kompot, с помощью которого мы ведём разработку во всех продуктах в Revolut.

Unidirectional data flow со строгими контрактами (Input + Output), Screens, Flows, Navigation всё это позволяет забыть даже про fragments с activity, и держать фокус на главном — разработка фичи
👍8👎1
Gradle Catalog: Bundles

Gradle Catalog позволяет группировать зависимости и подключать их одной декларацией.
Однако, bundle работает только с библиотеками. Подключить нужные плагины таким образом не получится
👍5👎1
Хватит использовать ResourceProvider во ViewModel

Написал небольшой пост про то, какие проблемы и альтернативы есть у использования класса-обёртки над appplicationContext в Presenter/ViewModel, для работы со строками
👍243👎1🙏1
Gradle открыл регистрацию на серию бесплатных тренингов на январь.

Лично посещал тренинги по Build Cache и Dependency Management, весьма хорошее погружение с неплохой практикой
👍14🔥1
Недавно выступал на Londroid, где рассказывал про все типы кеша в Gradle и практики, которые позволяют улучшить и держать build time в тонусе.

Презентация
Видео
👍16🔥6👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Прошло довольно много времени с тех пор, как я последний раз создавал кастомную вью. (Да что говорить, за 7 лет я написал всего несколько, чтобы прям по серьёзке, onMeasure/onLayout/onDraw и всё такое)

В прошлые выходные, я снова засел за изучение Jetpack Compose и попробовал сделать DonutChart (кстати, его можно вполне легко конвертировать в PieChart, поменяв useCenter на true и style на Fill у drawArc).

В старом способе создании вью, имплементация скорее всего выглядела бы так же, т.к. математические расчёты (самая сложная часть процесса для меня) — не меняются.
🔥13👍6
ViewPool для AndroidView в Jetpack Compose

Последнюю неделю оптимизирую скролл во всех списках с видео.
В данный момент, ExoPlayer не поддерживает рендеринг видео напрямую в Jetpack Compose, что решается оборачиванием TextureView в AndroidView.

Однако, при использовании в списках, возникает проблема, что данная TextureView часто ре-инфлейтится, из-за чего появляются пропуск кадров, что приводит к визуальным лагам.

Я уже стал реализовывать ViewPool для подобных кейсов сам, но обнаружил, что в Jetpack Compose 1.4 его поддержали (хоть и экспериментально). Работает это дело аналогично с RecyclerViewPool.

Несмотря на то, что результат радует и удалось избавиться от ~20% пропуска кадров, в RecyclerView это всё работало бы из коробки и проблем бы не было.

В прочем, Jetpack Compose без сомнений ещё нагонит своё со временем 🙂
👍18
Gradle и аббревиатуры

Недавно обнаружил, что Gradle позволяет использовать сокращённые названия тасок. Может быть даже одна буква, при отсутствии конфликтов.

Выглядит полезным. Однако, не используйте это в скриптах, чтобы никого не запутать.
👍8
Вероятно, самый простой способ измерить производительность скролла?

При улучшении перформанса, важно понимать, что оптимизации работают. Gfxinfo (работает с API 23+) позволяет получить всю необходимую информацию по потерянным кадрам одной командой, с помощью adb. Можно даже построить красивую гистограмму по времени, основываясь на output-е.

Данная утилита также используется в Macrobenchmark под капотом, которая позволяет автоматизировать этот процесс.

Конечно, в Android Studio есть профайлер, который также позволяет измерять количество потерянных кадров (и неплохо визуализирует информацию), но на больших проектах (по крайней мере, у меня) эта штука практически всегда сильно лагает, из-за чего приходится довольно часто убивать процесс студии.
🔥8👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Автоматизация рутины

Почти всегда мне лень включать GPU/HWUI rendering вручную.

Несколько adb команд и небольшой bash-скрипт, который можно добавить в ~/.bash_profile или ~/.zshrc, решают эту проблему. Теперь все, что нужно сделать, это набрать «profiling» в консоли. (Настройка займет пару минут)

К сожалению, это всё не особо задокументировано. Параметры для команды удалось найти вот тут
👍11🔥3
Разбираемся с кешированием в Gradle

В прошлом году мне часто приходилось работать с Gradle.

Как мне кажется, кеширование — одна из самых сложных и интересных тем. В то же время, это самое импактное, что можно сделать для улучшения времени сборки.

Написал статью, в которой детально и с иллюстрациями затрагиваются все уровни кеширования и как они работают.
🔥17👍6
Убийство процесса

Всегда проверяйте, как ваши экраны ведут себя при восстановлении процесса. Особенно, когда дело касается главного экрана.

Недавно ковырял баг с тем, что соотношение initial http запросов не коррелирует с метриками просмотра экрана.

Оказалось, что проблема воспроизводится только при смерти и восстановлении процесса: до 10% пользователей систематично оставляют приложение в overview menu, и это только главный экран.

Проверить данное поведение относительно просто: можно через Android studio, нажав на красную кнопку в logcat. (Перед этим, свернув приложение).

Но в последнее время, мне всё больше и больше нравится использовать командную строку для подобного.
🔥11👍5
Весь прошлый год я плотно работал с ExoPlayer и решил написал статью про это.

Что внутри?
- Как ускорить процесс загрузки
- Как улучшить разрешение
- Как предотвратить ошибки воспроизведения
- Ловушки и уроки
- Производительность с Jetpack Compose
- Влияние улучшений на продуктовые метрики
👍29🔥3🥰2
Про фейлы на собеседованиях: 5 минут

Весна 2017 года. На тот момент, я работал чуть меньше полугода в аутсорсе, в котором почти ни один мой проект не дошёл до продакшена. В то время, рынок был в неплохом пике и рекрутеры уже писали сами в LinkedIn даже с таким опытом.

После общения с ректутёром в одну из небольших компаний, тех интервью началось с рассказа о себе: про проекты за проектами, про попытки работать с RxJava/Dagger2/Moxy/ButterKnife и прочими героями того времени.

Однако, я зафейлил абсолютно всю добрую классику — на вопросы «расскажи про equals/hashCode», «volatile & synchronized» и т.д. — мне особо нечего было ответить.

Собес закончился за 5 минут, со словами
может быть вы прекрасно знаете как работает подкопотная магия Dagger 
(лол
,
все что я знал что чтобы DaggerAppComponent не горел красным и импортнулся, надо сфейлить билд разок)
, но то, что я вас спросил, мы активно используем.


Это был мой первый тех собес в жизни (на позицию Junior на первой работе меня взяли после просмотра GitHub и behavioral интервью. Такая роскошь иногда проскакивала на везение в 2016, что сейчас кажется нереальным)

Позже, я не так позорно завалил ещё 4 собеса в ряд в другие компании, но уже с другими пробелами, на этот раз больше с AndroidSdk и алгоритмами.

Все эти файлы в конечном итоге помогли устроиться в достаточно крупную компанию в конце того же года.

Вывод — не бойтесь заваливать интервью. Да, это неприятно, да, это бьёт по самолюбию, но в конечном итоге именно этот опыт повышает ваши шансы в будущем 🙂

Продолжение следует.
👍38❤‍🔥5👏3💯3🥱1