У многих из нас знания о гит заканчиваются на том как сложить код в VCS, достать оттуда и смержить. Предлагаю пойти дальше.
👉
👉
👉
👉
👉
Что еще используете в работе, помимо
👉
git bisect
Ищем по коммитам в каком релизе мы сломали приложение. Например баг всплывает в 2 последних версиях ... Но 2 месяца назад бага еще не было. Команда с помощью бинпоиска поможет быстрее пройтись по коммитам и найти в какой момент все сломалось👉
git ls-files '*.kt'
Ищем файлы в репозитории. Чуть удобнее чем стандартный ls (Покрывается AS)👉
git grep
Стандартный grep
но по вашему репозиторию (Покрывается AS)👉
git blame
Посмотреть историю изменений. Кем и когда менялся файл, доступно внутри AS, кликнув ПКМ -> Annotate
возле номера строки в файле👉
git log -S
Мощнее чем blame
. Покажет вам кто, когда и как менял значение, например, можно посмотреть историю передвижения константы по проекту во времени. Можно и регулярку вставить, воспользовавшись -G
Что еще используете в работе, помимо
add, commit, merge, rebase cherry-pick
?Компании быстрыми темпами движутся в направлении внедрения дизайн-систем. Согласование дизайн-системы и налаживание межкомандного взаимодействия, безусловно, важны. Но как оптимизировать внедрение изменений в дизайн-системе? Правильный ответ - автоматизировать
Автор показывает свой опыт создания системы по генерации токенов из Figma прямо в код. Эта задача не такая простая, как может показаться на первый взгляд!
На что еще посмотреть:
Тузла от компании RedMadRobot
iOS-only от HH.tech
И похожее от Amazon'а
Кстати, год назад пытались приложить Figma2Android к проекту, но увы не хватило гибкости. А как обстоит ситуация у вас? Имеется ли у вашей команды дизайн-система? Осуществляется ли выгрузка автоматически или по запросу от дизайнеров?
Автор показывает свой опыт создания системы по генерации токенов из Figma прямо в код. Эта задача не такая простая, как может показаться на первый взгляд!
На что еще посмотреть:
Тузла от компании RedMadRobot
iOS-only от HH.tech
И похожее от Amazon'а
Кстати, год назад пытались приложить Figma2Android к проекту, но увы не хватило гибкости. А как обстоит ситуация у вас? Имеется ли у вашей команды дизайн-система? Осуществляется ли выгрузка автоматически или по запросу от дизайнеров?
⚡ Kotlin 2, Релиз Кандидат!
По сравнению с бета версией стала стабильнее и уже на финишной прямой к релизу! Полагаю, что на KotlinConf в конце мая будет релиз
RC2 направлен на улучшение стабильности компилятора K2. Ждем!
Список исправлений: Kotlin:2.0.0-RC1
По сравнению с бета версией стала стабильнее и уже на финишной прямой к релизу! Полагаю, что на KotlinConf в конце мая будет релиз
RC2 направлен на улучшение стабильности компилятора K2. Ждем!
Список исправлений: Kotlin:2.0.0-RC1
Kotlin Help
What's new in Kotlin 2.1.0-Beta2 | Kotlin
Свежая библиотека Rebugger, поможет вам отслеживать рекомпозиции и их причины в логах:
Выглядит полезно при отлове лишних рекомпозиций, но может сказаться на перфомансе, так что используем только в дебаге!
@Composable
fun VehicleUi(
car: Car,
bike: Bike,
) {
var human by remember { mutableStateOf(Human("John")) }
// Call Rebugger and pass the states you want to track.
// It could be a function arg or a state
Rebugger(
trackMap = mapOf(
"car" to car,
"bike" to bike,
"human" to human
),
)
//...
}
Выглядит полезно при отлове лишних рекомпозиций, но может сказаться на перфомансе, так что используем только в дебаге!
Гугл более полугода не обновляет статистику по использованию версий Android.
Агрегированные данные с публичных источников тут
Более детальная аналитика по распределнию версий тут
Оба сайта хороши, если вы собираетесь объяснять продакту, почему нужно бросить поддержку старых версий. Или security инженеру, почему ограничиться поддержкой только последних 2 версий нельзя
Агрегированные данные с публичных источников тут
Более детальная аналитика по распределнию версий тут
Оба сайта хороши, если вы собираетесь объяснять продакту, почему нужно бросить поддержку старых версий. Или security инженеру, почему ограничиться поддержкой только последних 2 версий нельзя
Неделю назад вышел релиз кандидат для androidx. Почему важно?
Только вчера обсуждали распределение пользователей по версиям Android, а сегодня androidx постепенно релизит обещанное увеличение minSdkVersion до 19 для androidx.* компонентов. Ранее минимальная версия была 14.
Надеюсь вы обновились или в планах обновиться, иначе будет тяжело
Только вчера обсуждали распределение пользователей по версиям Android, а сегодня androidx постепенно релизит обещанное увеличение minSdkVersion до 19 для androidx.* компонентов. Ранее минимальная версия была 14.
Надеюсь вы обновились или в планах обновиться, иначе будет тяжело
GitHub
Release 1.12.0-rc01 · material-components/material-components-android
Important
Required minSdkVersion is now 19 or higher, for Material and AndroidX (blog post).
Dependency Updates
Dependency
Previous version
New version
androidx.transition
1.5.0-beta01
1.5.0...
Required minSdkVersion is now 19 or higher, for Material and AndroidX (blog post).
Dependency Updates
Dependency
Previous version
New version
androidx.transition
1.5.0-beta01
1.5.0...
Какой у вас minSdk в проекте?
Final Results
1%
14 и меньше
3%
15 - 19
58%
20 - 24
30%
25 - 30
5%
31 - 34
3%
35, у нас релиз через пол года
Proto datastore и его тестирование
👉 Типобезопасная замена SharedPreferences
👉 Protobuf в основе
👉 Поддержка корутин и своя библиотека для тестирования
Кодлаба от гугла, чтобы понять как мигрировать
Документация по proto 3
👉 Типобезопасная замена SharedPreferences
👉 Protobuf в основе
👉 Поддержка корутин и своя библиотека для тестирования
Кодлаба от гугла, чтобы понять как мигрировать
Документация по proto 3
Android 15 Beta!
Семимильными шагами гугл готовится к Google I/O
👉 Edge2Edge скролл. Красиво, но мы знаем сколько боли приносит работа с
👉 Улучшение работы с NFC. Кто сейчас в приложении это использует активно, расскажите как дела обстоят?
👉 Автоархивирование приложений, анонсировано было ранее. Возможно будем бороться так же, как боремся с doze mode
👉 Улучшенный профайлинг. Больше данных, легче отлавливать проблемы!
👉 Поддержка TalkBack для людей с ограниченными возможностями. Отлично дополняется этим постом
👉 Сквозное шифрование и повышенная защищенность фоновых процессов. Чуть больше про шифрование писал тут
Поставить Android 15 beta себе на Pixel можно тут
Семимильными шагами гугл готовится к Google I/O
👉 Edge2Edge скролл. Красиво, но мы знаем сколько боли приносит работа с
Toolbar
и AppBar
. Убирают привычный хак setDecorFitsSystemWindows.
Чего нам ждать тут?👉 Улучшение работы с NFC. Кто сейчас в приложении это использует активно, расскажите как дела обстоят?
👉 Автоархивирование приложений, анонсировано было ранее. Возможно будем бороться так же, как боремся с doze mode
👉 Улучшенный профайлинг. Больше данных, легче отлавливать проблемы!
👉 Поддержка TalkBack для людей с ограниченными возможностями. Отлично дополняется этим постом
👉 Сквозное шифрование и повышенная защищенность фоновых процессов. Чуть больше про шифрование писал тут
Поставить Android 15 beta себе на Pixel можно тут
Android Developers Blog
The First Beta of Android 15
The first Beta of Android 15 brings edge-to-edge display by default, app archiving justification, app-managed profiling, and more.
Уже попробовали обновленный профайлер? А Google выкатывает статью о применении его в A/B тестах
Подразумевается, что с помощью power profiler можно найти:
👉 Энергозатраный неоптимизированный код
👉 Лишние фоновые процессы
Сценарии, описанные в статье, реализуемы и с помощью стандартного профайлера. Но почему бы и не воспользоваться точной количественной метрикой?
Подразумевается, что с помощью power profiler можно найти:
👉 Энергозатраный неоптимизированный код
👉 Лишние фоновые процессы
Сценарии, описанные в статье, реализуемы и с помощью стандартного профайлера. Но почему бы и не воспользоваться точной количественной метрикой?
Пятница! Если уж релизите в пятницу, то проведите дополнительные тесты, а именно Accessibility Check
Android Studio Iguana уже стабильна, а это значит вам точно доступен UI check mode, которая покажет как на разных экранах будет выглядеть ваше приложение
Подробнее с примерами и что делать, если проблемы обнаружены
Android Studio Iguana уже стабильна, а это значит вам точно доступен UI check mode, которая покажет как на разных экранах будет выглядеть ваше приложение
Подробнее с примерами и что делать, если проблемы обнаружены
Раньше, во времена XML, у нас была удобная превьюшка цветов. С приходом Jetpack Compose мы потеряли этот функционал.
Полезный плагин, который это возвращает на поля для вашего удоства! А что внутри?
👉 Превью для объектов типа
👉 Старый добрый color picker по клику на превью
👉 Превью для функций
Библиотека свежая, поэтому не стесняйтесь оставлять issues. Исходники можно глянуть тут
Полезный плагин, который это возвращает на поля для вашего удоства! А что внутри?
👉 Превью для объектов типа
Color
👉 Старый добрый color picker по клику на превью
👉 Превью для функций
compositeOver
, copy
, convert
и lerp
Библиотека свежая, поэтому не стесняйтесь оставлять issues. Исходники можно глянуть тут
Фокус как состояние: эффективный фокус-менеджмент на Android TV с Jetpack Compose.
👉 Это не стандартное решение типа Leanback или Compose for TV
👉 Основная проблема решения - фокус не является частью состояния, поэтому приходится использовать модификаторы помощи
👉 Текущий фокус определен для экрана в целом
👉 Благодаря этому подходу можно легко тестировать фокус и его ожидаемое изменение
👉 Восстановление фокуса работает из коробки, так как теперь он зависит от состояния, а также становится проще отлаживать приложение
Исходя из реализации, стандартный фокус-менеджмент блокируется целиком, и подменяется реализацией через состояние. Отсюда возникают проблемы и собственные решения в списках и в иных пограничных случаях.
👉 Это не стандартное решение типа Leanback или Compose for TV
👉 Основная проблема решения - фокус не является частью состояния, поэтому приходится использовать модификаторы помощи
focusRequester, onFocusChanged, focusable
и focusProperties
👉 Текущий фокус определен для экрана в целом
👉 Благодаря этому подходу можно легко тестировать фокус и его ожидаемое изменение
👉 Восстановление фокуса работает из коробки, так как теперь он зависит от состояния, а также становится проще отлаживать приложение
Исходя из реализации, стандартный фокус-менеджмент блокируется целиком, и подменяется реализацией через состояние. Отсюда возникают проблемы и собственные решения в списках и в иных пограничных случаях.
Продолжаем тему собеседований. Блок вопросов про многопоточность в приложении. Подойдет как для подготовки к собеседованиям, так и для использования в вопросах на собеседовании:
👉 Что такое корутины и как они связаны с потоками?
👉 Зачем вам использовать корутины?
👉 Как создать корутину и управлять ею?
👉 В чем разница между launch, async и runBlocking?
👉 Что представляет собой coroutineScope?
👉 Зачем нужны suspend функции и в чем их отличие от обычных?
👉 Как обрабатывать исключения в корутинах (кроме try-catch)?
👉 Что такое coroutineContext и coroutineDispatcher, и когда вы их используете?
👉 Как остановить выполнение корутины?
Ответы тут
Документация тут
👉 Что такое корутины и как они связаны с потоками?
👉 Зачем вам использовать корутины?
👉 Как создать корутину и управлять ею?
👉 В чем разница между launch, async и runBlocking?
👉 Что представляет собой coroutineScope?
👉 Зачем нужны suspend функции и в чем их отличие от обычных?
👉 Как обрабатывать исключения в корутинах (кроме try-catch)?
👉 Что такое coroutineContext и coroutineDispatcher, и когда вы их используете?
👉 Как остановить выполнение корутины?
Ответы тут
Документация тут
Medium
Important Coroutine Interview Questions for Experienced Android Developers
Coroutines have revolutionized asynchronous programming in Kotlin, offering a powerful and concise way to handle background tasks in…
За inline замолвите слово.. Мне, честно говоря, нечего более добавить. Если вам кажется что вы мало знаете про
inline
, читайте пост от @rareillyTelegram
Ra'Reilly - Заметки про Android и не только
Продолжаю рубрику #насмотренность. Сегодня смотрим на inline-классы. На мой взгляд это одна из самый недооценённых фичей Котлина. Подозреваю, что это потому что потребность в inline-классах неочевидна. Попробую это исправить.
Напомню. Inline-класс это обёртка…
Напомню. Inline-класс это обёртка…
Немного красивых замеров того как K2 ускоряет сборку. Тесты проводили над Anki-Android для чистой и инкрементальной сборки.
Как самому провести этот бенчмарк и узнать данные для вашего устройства - тут
Остальные замеры тут
Как самому провести этот бенчмарк и узнать данные для вашего устройства - тут
Остальные замеры тут
Реализация кэширования с OkHttp
Ускоряем работу приложения, жертвуя возможной актуальностью данных.
👉 Кэширование API-запросов с использованием
👉 Правила кэширования могут быть установлены в зависимости от статуса интернет-соединения. Например, когда соединение активное, можно использовать кэшированные ответы за последние 30 минут, а в режиме офлайн — ответы, возраст которых составляет до 1 дня, для улучшения пользовательского опыта
👉 Механизм перехватчиков из
В статье приводится пример клиента, который можно прямо сейчас взять и подставить в ваш проект, чтобы сразу увидеть результат. Используете ли вы кэширование запросов в проекте?
Ускоряем работу приложения, жертвуя возможной актуальностью данных.
👉 Кэширование API-запросов с использованием
CacheControl
из OkHttp помогает позволяет сохранять ответы API с заданным сроком годности, уменьшая количество API-запросов и снижая время отклика👉 Правила кэширования могут быть установлены в зависимости от статуса интернет-соединения. Например, когда соединение активное, можно использовать кэшированные ответы за последние 30 минут, а в режиме офлайн — ответы, возраст которых составляет до 1 дня, для улучшения пользовательского опыта
👉 Механизм перехватчиков из
OkHttp
позволяет модифицировать HTTP-запросы и ответы, что способствует реализации правил кэширования. Функции, такие как maxAge()
и maxStale()
, контролируют свежесть ответов, помогая эффективно управлять кэшемВ статье приводится пример клиента, который можно прямо сейчас взять и подставить в ваш проект, чтобы сразу увидеть результат. Используете ли вы кэширование запросов в проекте?
Medium
Increase performance of your app by caching API calls using OkHttp
Let’s be honest, we’ve all been there — frantically refreshing our app, watching the loading spinner spin endlessly as we wait for that…