Отличный пример использования появившихся в 1.6.20-М1 контекстных ресиверов для того, чтобы сделать DSL более чистыми.
А если вы хотите разобраться с контекстными ресиверами подробнее, почитайте текст соответствующего пропозала.
А если вы хотите разобраться с контекстными ресиверами подробнее, почитайте текст соответствующего пропозала.
timothyearley.github.io
DSL with new context receivers
Стоило только вспомнить на прошлой неделе про синтетики, как пришла новость от Google – они будут удалены из Kotlin этой осенью, вместе с выходом версии 1.8. Parcelize при этом остается жить, но как отдельный плагин.
Если вы все еще не перешли на View Binding, то вот гайд по миграции.
Если вы все еще не перешли на View Binding, то вот гайд по миграции.
Android Developers Blog
Discontinuing Kotlin synthetics for views
Posted by Márton Braun, Developer Relations Engineer
Обновились официальные гайды по тестированию:
🤔Раздел «Что тестировать»
👨❤️👨Раздел «Test Doubles»
📝Примеры локальных и инструментальных тестов
🛠Раздел «Инструменты тестирования»
📰Статья «Advanced test setup»
Про детали и причины обновления можно прочитать в блогпосте.
🤔Раздел «Что тестировать»
👨❤️👨Раздел «Test Doubles»
📝Примеры локальных и инструментальных тестов
🛠Раздел «Инструменты тестирования»
📰Статья «Advanced test setup»
Про детали и причины обновления можно прочитать в блогпосте.
Android Developers
Test apps on Android | Android Developers
Быстрая проверка на то, не включаете ли вы в релизные сборки какие-нибудь тестовые зависимости:
./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep -e test -e junit
Twitter
Alex Vanyo
Random sanity check for your Android projects: ./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep -e test -e junit If that outputs some test dependency, then that dependency is being included in your release build. You probably don't…
В kotlinx-coroutines недавно завезли новые возможности, которые упрощают тестирование кода с корутинами. В блогпосте разбираются два кейса:
- Написание теста для кода, который вызывает suspend функции
- Написание теста для кода, который запускает внутри себя новую корутину
- Написание теста для кода, который вызывает suspend функции
- Написание теста для кода, который запускает внутри себя новую корутину
craigrussell
Testing Android Coroutines using runTest
The latest tooling to help test Android Coroutines, provided as part of the kotlinx.coroutines test libraries, which aim to “provide utilities for efficiently testing coroutines”.
Branch by Abstraction – это техника разработки, позволяющая защититься от болезненного мерджа долгоживущих веток. Вместо того, чтобы вести рефакторинг в отдельной ветке в VCS, изменяемый кусок системы выделяется в закрытую интерфейсом абстракцию. Вы рефакторите его копию, и сохраняете оригинал до тех пор, пока работа не будет закончена.
Больше деталей и примеров – в статье.
Больше деталей и примеров – в статье.
Хабр
Как применять Branch by Abstraction в проекте на примере Android-разработки
Представим простую историю. Вы заканчиваете делать рефакторинг, которым занимались последние 2 недели. Вы хорошо над ним поработали, сделали несколько ключевых изменений в проекте. Делаете...
Интересный пример того, как на скорость выполнения кода влияет на каком типе вызывается функция
intersect.
Arkadiusz Chmura
Beware of the order of operands in some Kotlin Collection operations
The order of operands can drastically affect the performance of your code.
Всем привет.
Война – это ужасно, и того, что происходит, не должно происходить. Я считаю недопустимой войну, развязанную Россией, и безумными действия российского правительства.
Бояться в этой ситуации – абсолютно нормально, потому что никто не может представить, как дальше будут развиваться события. Но постарайтесь не давать страху перерастать в панику. Это – плохое состояние, в котором любые принятые решения будут, скорее всего, неверными.
Чтобы у вас была возможность отвлечься от новостных лент, я продолжу выкладывать в свои каналы технический контент. Кроме этого, я обязательно буду делиться ссылками, актуальными сейчас – новостями про работу важных для нас сервисов, советами по релокации. Если вы не захотите его читать – можете замьютить канал или отписаться от него.
Ребята из 🇺🇦, держитесь ❤️
Война – это ужасно, и того, что происходит, не должно происходить. Я считаю недопустимой войну, развязанную Россией, и безумными действия российского правительства.
Бояться в этой ситуации – абсолютно нормально, потому что никто не может представить, как дальше будут развиваться события. Но постарайтесь не давать страху перерастать в панику. Это – плохое состояние, в котором любые принятые решения будут, скорее всего, неверными.
Чтобы у вас была возможность отвлечься от новостных лент, я продолжу выкладывать в свои каналы технический контент. Кроме этого, я обязательно буду делиться ссылками, актуальными сейчас – новостями про работу важных для нас сервисов, советами по релокации. Если вы не захотите его читать – можете замьютить канал или отписаться от него.
Ребята из 🇺🇦, держитесь ❤️
Начался еще один цикл статей про structured concurrency. У этого, правда, довольно многообещающее начало – хорошо разбираются исходные проблемы, а базовые концепции объясняются на понятных схемах.
Thedevtavern
Structured concurrency explained - Part 1: Introduction
This post explains structured concurrency in an intuitive way and shows how it simplifies concurrent programs in practice!
Расшифровка большого доклада от Яндекс Go про Accessibility в Android приложениях. Помимо технической информации, все описываемые фичи комментируются незрячим экспертом.
Хабр
Адаптация Android-приложения для незрячих
Если вы мобильный разработчик, знаете ли вы, каково пользоваться вашим приложением незрячим людям? В каких именно местах они могут столкнуться с главными сложностями? Как вообще будет происходить...
Интересное эссе про то, что использование IDE при разработке не даст вам стать действительно крутым специалистом. Проблема, по мнению автора, в том, что когда вы слишком привыкаете к автоматическим саджестам от IDE, вы не пытаетесь придумать способы сделать свой код лучше. А новые инструменты вроде Copilot делают проблему еще более острой.
briandfoy.github.io
What do you really get from IDE-driven development?
I’ve been playing with GitHub Copilot, an IDE extensions that uses GitHub’s vast knowledge of how people code to suggest what you probably meant to type next. I’m running it through Visual Studio Code, but it also runs in JetBrains and Neovim.
Подъехали свежие доклады про мультиплатформу с недавно прошедшей конференции Kotlin Koders:
Новые фичи в Kotlin Multiplatform
Обзор библиотек для быстрого старта
Про одновременную разработку на Kotlin и Swift
GraphQL в KMM
Новые фичи в Kotlin Multiplatform
Обзор библиотек для быстрого старта
Про одновременную разработку на Kotlin и Swift
GraphQL в KMM
YouTube
Kotlin KODERS 2021 - What's new in Kotlin Multiplatform by Liliia Abdulina
The latest news from JetBrains about Kotlin Multiplatform, at the end of 2021
Spotify выпустили Ruler – Gradle плагин для измерения и анализа размера APK. Из основных фичей:
- Анализирует APK, собранные под разные профили девайсов
- Замеряет Download Size и Install Size
- Строит дерево зависимостей от конкретных файлов до модулей, в которых они содержатся
- Дает оценку по влиянию на размер каждого класса
- Умеет маппить все классы на владельцев кода
В блоге ребята говорят, что благодаря инструменту уменьшили свое приложение уже на 9%.
- Анализирует APK, собранные под разные профили девайсов
- Замеряет Download Size и Install Size
- Строит дерево зависимостей от конкретных файлов до модулей, в которых они содержатся
- Дает оценку по влиянию на размер каждого класса
- Умеет маппить все классы на владельцев кода
В блоге ребята говорят, что благодаря инструменту уменьшили свое приложение уже на 9%.
GitHub
GitHub - spotify/ruler: Gradle plugin which helps you analyze the size of your Android apps.
Gradle plugin which helps you analyze the size of your Android apps. - spotify/ruler
Square пишут в Твиттере, что переезд на Gradle 7.4 дал ускорение configuration time на 30% на их бенчмарках.
Про весь список изменений в Gradle 7.4 можно прочитать здесь.
Про весь список изменений в Gradle 7.4 можно прочитать здесь.
Twitter
Ralf Wondratschek
I highly recommend upgrading to Gradle 7.4. It reduced configuration time for us significantly. Several of our benchmarks run about 30% (!!!) faster. The graph below shows configuration vs execution time of one our benchmark scenarios. Look at the nose dive!…
Вдогонку еще одно обсуждение в Твиттере про Gradle – есть ли смысл мигрировать с buildSrc на Gralde Version Catalogs. Если кратко, то стоит, и вот почему:
- Использование buildSrc увеличивает время компиляции
- При любом изменении buildSrc инвалидируется весь билд кэш
- В будущем даст дополнительные плюшки при более тесной интеграции Gradle с GitHub
Из минусов – в Android Studio пока не работает автокомплишн, но вот тут есть воркэраунд.
- Использование buildSrc увеличивает время компиляции
- При любом изменении buildSrc инвалидируется весь билд кэш
- В будущем даст дополнительные плюшки при более тесной интеграции Gradle с GitHub
Из минусов – в Android Studio пока не работает автокомплишн, но вот тут есть воркэраунд.
Twitter
Sam Edwards
What is the benefit of moving from buildSrc -> Gradle Version Catalogs? docs.gradle.org/current/usergu… Standardization? Performance? etc? 🤷♂️ I feel like I should use it, so that I'm using a standard, but am looking for performance numbers or something…
Серия статей про JNI, которые достаточно неплохо раскрывают тему:
Введение в JNI и Hello World
JNI-типы и работа с C++
Производительность JNI
Введение в JNI и Hello World
JNI-типы и работа с C++
Производительность JNI
Хабр
JNI Часть 1: Введение
Всем привет! Меня зовут Роман Аймалетдинов и я разрабатываю клиентское приложение Ситимобил. Решил написать небольшую серию из трех статей по JNI, так как технология используется редко, но иногда она...
На прошлой неделе я выкладывал подборку полезных плагинов для Android Studio и судя по реакциям, вам было полезно. Держите еще одну подборку. А в комментариях расскажите про самые полезные плагины, которые вы сами используете!
Medium
Useful Android Studio plugins
Android Studio is a fully-featured IDE built by JetBrains and Google that has all that you need for writing an application. But you always…
Посмотрите, какой классный опенсорсный проект! Реализация простой IDE на Compose for Desktop, которая под капотом использует бэкенд от IntelliJ IDEA для code insight.
GitHub
GitHub - n34t0/compose-code-editor: A desktop code editor app using Jetpack Compose for Desktop and IntelliJ Platform
A desktop code editor app using Jetpack Compose for Desktop and IntelliJ Platform - GitHub - n34t0/compose-code-editor: A desktop code editor app using Jetpack Compose for Desktop and IntelliJ Plat...
RIBs – это архитектура, которую использовали при масштабном рефакторинге приложения Uber. Если вы раньше с ней особо не сталкивались, то вот эта серия статей поможет разобраться, что к чему:
Плюсы RIBs
Минусы RIBs
Плюсы RIBs
Минусы RIBs
Medium
Advantages of RIB(Router, Interactor, Builder)
RIB is the cross-platform architecture framework designed by uber for mobile apps with a large number of engineers and nested states. RIB…
Директория
.gradle
легко может вырасти до нескольких десятков гигабайт. Если вам надо освободить место на диске, а весь кеш сносить не хочется, можно попробовать удалить только те файлы, которые не использовались дольше месяца. В статье рассказывается, какой конкретно командой можно это сделать.Crushing C.O.D.E
Reducing mammoth gradle caches
Blog by Nishant Srivastava