Набор начинающего платформенного инженера
Попробовать капнуть поглубже, разобраться в кишках системы и собрать свой образ AOSP!
👉 Перво-наперво это конечно системные требования, они примерно соответствуют топовому MacBook Pro, если бы он был не arm.
👉 Зачем столько ядер? AOSP содержит примерно 150 000 файлов, которые лучше всего обрабатывать параллельно. Сюда же и ответ зачем нужна быстрая память
👉 Синхронизация внешних зависимостей проекта займет порядка 200-300 GB вашего интернет-траффика
👉 Можно выбрать для какого гуглового девайса вы хотите собирать систему тут
👉 После всех манипуляций, простой командой запускаем сборку
⌛️ Ждём, ждём, ждём
👉 C помощью
👉 Для удобства модификации исходников используется Android Studio for Platform. Это отдельная версия Android Studio, которую релизнули в этом году
👉 Можно запустить такой сетап где-нибудь в облаке, если у вас нет желания собирать отдельную станцию под это. Будет стоить денег, но, обычно, арендовать на день-другой стоит не дорого
Попробовать капнуть поглубже, разобраться в кишках системы и собрать свой образ AOSP!
👉 Перво-наперво это конечно системные требования, они примерно соответствуют топовому MacBook Pro, если бы он был не arm.
72 Core x86_64, 64GB DDR5, 400GB SSD NVMe
. Такой сетап соберет билд за 40 минут (по заверениям гугла). 6 ядерная машина же застрянет на 6 часов в сборке👉 Зачем столько ядер? AOSP содержит примерно 150 000 файлов, которые лучше всего обрабатывать параллельно. Сюда же и ответ зачем нужна быстрая память
👉 Синхронизация внешних зависимостей проекта займет порядка 200-300 GB вашего интернет-траффика
👉 Можно выбрать для какого гуглового девайса вы хотите собирать систему тут
👉 После всех манипуляций, простой командой запускаем сборку
source setup/buildenv.sh
👉 C помощью
adb
и fastboot
заливаем сборку в девайс и радуемся свежей операционке Android aka Good Reads
👉 Для удобства модификации исходников используется Android Studio for Platform. Это отдельная версия Android Studio, которую релизнули в этом году
👉 Можно запустить такой сетап где-нибудь в облаке, если у вас нет желания собирать отдельную станцию под это. Будет стоить денег, но, обычно, арендовать на день-другой стоит не дорого
Please open Telegram to view this post
VIEW IN TELEGRAM
Sid Patil
The Starter kit for Android Platform Engineering
Unlock the secrets of the Android Open Source Project (AOSP) with a comprehensive guide to Platform Engineering. This article covers everything from machine setup and IDE configuration to compiling a full Android system builds for Google Pixels.
123.gif
18.4 MB
Jetpack Glance
Многие делали виджеты для Android стандартными средствами. Теперь делаем с помощью Jetpack Compose. В статье можно подглядеть пример и сразу попробовать быстренько сверстать виджет для своего приложения.
Жаль, пока что есть поддержка только Android. Надеюсь, когда-нибудь будет и iOS
Документация https://developer.android.com/develop/ui/compose/glance
❗️ Помните! Лучше не смешивать
Многие делали виджеты для Android стандартными средствами. Теперь делаем с помощью Jetpack Compose. В статье можно подглядеть пример и сразу попробовать быстренько сверстать виджет для своего приложения.
Жаль, пока что есть поддержка только Android. Надеюсь, когда-нибудь будет и iOS
Документация https://developer.android.com/develop/ui/compose/glance
Composable
элементы виджета с существующими элементами. Они могут быть несовместимы с элементами из стандартной библиотекиPlease open Telegram to view this post
VIEW IN TELEGRAM
Про Server Driven UI.
Ранее автор разбирал ограничение Client Driven UI. А теперь продает нам преимущества SDUI.
👉 Как следует из названия, экраны отрисовываются по инструкциям с сервера
👉 Несмотря на кажущуюся независимость клиента от сервера, ваше приложение всё ещё будет ограничено существующими элементами
👉 Очень важный элемент — дизайн-система, которой следуют все приложения, иначе всё развалится
👉 A/B тесты, персонализация приложения под пользователя, обновление приложения на лету и независимый от сторов релиз-менеджмент — всё это вы получаете бонусом
👉 Сложность на Backend'е, невероятно долгая загрузка приложения, экспоненциально растущая сложность разработки и поддержки клиента — всё это вы также получаете бонусом c SDUI
Кто использует: Reddit, Tinder, AirBnB
Ранее автор разбирал ограничение Client Driven UI. А теперь продает нам преимущества SDUI.
👉 Как следует из названия, экраны отрисовываются по инструкциям с сервера
👉 Несмотря на кажущуюся независимость клиента от сервера, ваше приложение всё ещё будет ограничено существующими элементами
👉 Очень важный элемент — дизайн-система, которой следуют все приложения, иначе всё развалится
👉 A/B тесты, персонализация приложения под пользователя, обновление приложения на лету и независимый от сторов релиз-менеджмент — всё это вы получаете бонусом
👉 Сложность на Backend'е, невероятно долгая загрузка приложения, экспоненциально растущая сложность разработки и поддержки клиента — всё это вы также получаете бонусом c SDUI
Кто использует: Reddit, Tinder, AirBnB
Medium
Mastering SDUI: A Deep Dive into Server-Driven UI
What is Server-Driven UI (SDUI)?
Есть ли у вас опыт с Server Driven UI? Что думаете об этом подходе?
Final Results
6%
Первый раз слышу об этом
40%
Слышал ранее, но не применял
41%
Поработал на проекте где несколько экранов отрисовывались по инструкциям с сервера
16%
Был проект полностью в этом подходе
This media is not supported in your browser
VIEW IN TELEGRAM
RemoteConfig на Гугл таблицах
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
А как собеседоваться в 2023?
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
Улучшаем проигрывание видео через ExoPlayer
👉 В Reddit классически использовали DASH формат для Android и HLS для web/iOS. -> Заменили на mp4 для коротких видео длиной менее 45 секунд. Количество ошибок плейбека снизилось на 5%, просмотры за счет ускорения запуска увеличились на 1%
👉 Не стали использовать SimpleCache и стандартные методы хранения, а воспользовались DownloadManager. У этого метода есть и минусы. Например, подгрузить заранее первые 500kb данных из видео - нельзя
👉 Динамический размер буферизации для видео разной длины. Это сказалось на метриках, а вообще про буферизацию в реддит можно почитать тут
👉 Адаптивный битрейт через BandwidthMeter так же сказался на продуктовых метриках
👉 Для рендера использовали TextureView, но планируют перезжать на SurfaceView, который лучше работает с GPU, но может сказаться на перфомансе и потреблении батарейки
И что?
Проводите A/B тесты не только продуктовых фичей, но и платформенных чтобы понимать куда двигаться дальше. Связывайте продуктовые и платформенные метрики. ExoPlayer предоставляет неплохой интерфейс AnalyticsListener чтобы собирать данные касательно плеера - не самый удобный, но лучше чем ничего
👉 В Reddit классически использовали DASH формат для Android и HLS для web/iOS. -> Заменили на mp4 для коротких видео длиной менее 45 секунд. Количество ошибок плейбека снизилось на 5%, просмотры за счет ускорения запуска увеличились на 1%
👉 Не стали использовать SimpleCache и стандартные методы хранения, а воспользовались DownloadManager. У этого метода есть и минусы. Например, подгрузить заранее первые 500kb данных из видео - нельзя
👉 Динамический размер буферизации для видео разной длины. Это сказалось на метриках, а вообще про буферизацию в реддит можно почитать тут
👉 Адаптивный битрейт через BandwidthMeter так же сказался на продуктовых метриках
👉 Для рендера использовали TextureView, но планируют перезжать на SurfaceView, который лучше работает с GPU, но может сказаться на перфомансе и потреблении батарейки
И что?
Проводите A/B тесты не только продуктовых фичей, но и платформенных чтобы понимать куда двигаться дальше. Связывайте продуктовые и платформенные метрики. ExoPlayer предоставляет неплохой интерфейс AnalyticsListener чтобы собирать данные касательно плеера - не самый удобный, но лучше чем ничего
Android Good Reads
А как собеседоваться в 2023? На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком 👉 Просто оставить свое резюме на сайте компании больше…
Во вторник была жаркая дискуссия в комментариях (рекомендую почитать). Один из выводов - нужно расширять свою сеть контактов в linkedIn. Всех заинтересованных прошу оставлять ссылки на себя в комментариях
А как дела у SwiftUI в кроссплатформе
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный💵
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Please open Telegram to view this post
VIEW IN TELEGRAM
Очередная хайп-статья непопулярных мнений
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
Yves Kalume's Blog
Let's clarify some misconceptions around android development these days
Forget the Formalities ! There's no introduction for this blogpost 😅 (or maybe I have a blank page syndrome). Let's try debunking some myths around android development and clearing the air ! (oh actually this seems to be a good intro, isn't it ? 🫣)...
Распознование поз в реальном времени с ML kit
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Medium
Real-Time Pose Detection in Camera with ML Kit in Android
We’ve already learned about pose detection in Android, where we could analyze body poses from pictures and videos.
Koin, ближайшие планы обновлений
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
wasm
и поддержали ViewModel api
для compose miltiplatform
. Однако, команда решила не выкатывать релиз 3.6, а сразу двинуться к 4.0, где поддержат Kotlin 2 и почистят deprecated api
.А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
Medium
Koin Roadmap Update — From 3.6 to 4.0
In response to your feedback and the evolving landscape of Kotlin development, we are bridging from version 3.6 Beta to 4.0
Какой DI фреймворк используете?
Final Results
26%
Koin
38%
Dagger
20%
Hilt
1%
Kodein
3%
Toothpick
9%
Самописное решение
4%
Не используем DI
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытые фичи текстового поля
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
👉 Изменения шрифта без задания
👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
decorationBox
в зависимости от написанного текста👉 Изменения шрифта без задания
font
(как на гифке)👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
This media is not supported in your browser
VIEW IN TELEGRAM
Добавляем проверку на номер задачки в TODO через линтер
Пустые
Пустые
TODO
маловероятно будут исправлены, если не имеют за собой закрепленной задачи. А имея задачу очень просто найти место где возникла проблема. Автоматизация проверки формата TODO
через lint и как ее делать: тут и тутЧто используете в качестве статического анализатора кода в проекте?
Final Results
73%
Detekt
46%
Lint
29%
ktLint
1%
PMD
0%
FindBugs
2%
bash скрипты 🤨
Android Good Reads
Какой DI фреймворк используете?
А вот вам еще 1 DI фреймворк, который никто не упомянул ранее!
Используем
Не рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+⭐️ )
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Используем
kotlin-inject
в Kotlin/Compose Multiplatform проектеНе рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Please open Telegram to view this post
VIEW IN TELEGRAM
John O'Reilly
Using kotlin-inject in a Kotlin/Compose Multiplatform project
I’ve been using Koin in most of the Kotlin Multiplatform (KMP) samples I have but thought it would be good to include use of at least one other DI framework and this article outlines changes made to add kotlin-inject to the BikeShare KMP sample. This project…
Как под капотом работает @Preview?
👉 Для просмотра метода с
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
👉 Как можно этим воспользоваться? Например, положить
В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
👉 Для просмотра метода с
@Preview
аннотацией используется androidx.compose.ui.tooling.PreviewActivity
, который собирает параметры из @PreviewParameter
и свойства из @Preview
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
androidTest
. На выходе получаем apk с превьюшками, который выводится в Android Studio. 👉 Как можно этим воспользоваться? Например, положить
AndroidManifest.xml
в module/src/androidTest
и поменять параметры приложения, которое запускается для preview. А значит, мы можем и сами собрать приложение из наших @Preview
и любых @Composable
элементов на девайс! В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
Medium
Jetpack Compose Previews: Delving Deep Into Their Inner Workings
Uncover the secrets of Jetpack Compose Previews! Learn to run them with adb, how to compile them and the nuances in multi-module setups.
.aiexclude
файл по аналогии с .gitignore
в корень проекта и укажите директории или конкретные файлы.Документация: https://developer.android.com/studio/preview/gemini/aiexclude
Please open Telegram to view this post
VIEW IN TELEGRAM
Цикл статей про архитектуру от Zsolt.
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных