the developer diary

14
Public channel
Open in app
the developer diary
40
Google презентовал jetpack media3, одно кольцо что бы править всеми. Media3 включает в себя ExoPlayer, MediaSession и UI компоненты плеера. Идея хорошая, идут по стопам CameraX. Подкупает стабильность API, так как с ExoPlayer напрямую бывают частые изменения, но это еще одна обертка над ExoPlayer, из за чего могут возникнуть проблемы. Пока еще в альфе. #android #jetpack #media #exoplayer #player ...
the developer diary
83
В Kotlin 1.5 сделали deprecated `JvmDefault` аннотацию, которая помечала методы как default для Java, и не только это, в bytecode. Теперь достаточно прописать в качестве аргумента компилятору `all` вместо `enable` и `all-compatibility` вместо `compatibility`. После этого больше не будет нужды использовать аннотацию, так как все будет работать и без нее. #kotlin #1_5 #jvmdefault #deprecated #bytec ...
the developer diary
78
Inline classes вышли из experimental статуса в Kotlin 1.5. Произошла смена именования с inline на value. Отличный функционал, использовал их ещё с самого первого появления. #kotlin #1_5 #inline #value #class https://www.manusobles.com/posts/inline-value-classes-kotlin
the developer diary
113
Все тот же Chris зарелизил новую версию библиотеки insetter. Позволяет в довольно удобной форме работать с window insets. В новой версии он добавил поддержку применять insets вместе с анимацией. API простое, стоит присмотреться. В будущем возможно весь функционал переедет в Android Jetpack. #ui #window #insets #library https://twitter.com/chrisbanes/status/1397201963192918040?s=19
the developer diary
168
Chris представил новые библиотеки для jetpack compose, одна из них это pager layouts, аналог ViewPager. Выглядит интересно, как раз подобного функционала раньше не хватало. Есть возможность как вертикального расположения, так и горизонтального. Также поддерживает offset и анимации. #ui #jetpack #compose #pager #library https://twitter.com/chrisbanes/status/1374782893642416134?s=19
the developer diary
180
С тех пор как команда Google перевела свои support библиотеки и прочее на package androidx, приходилось использовать Jetifier для совместимости и подмены пакетов на androidx. Это было давно и поэтому стоит посмотреть на возможность его отключения, потому как он прилично замедляет инкрементальную сборку. В этом твитте есть положительные истории его отключения в разных командах, а также ссылка на п ...
the developer diary
166
Ребята из Google анонсировали, что KSP (Kotlin Symbol Processing) теперь в стадии Alpha. Здесь же есть ссылка на sample, который можно посмотреть. В статье пишут, что ускорение сборки около x2 при работе с Room. #kapt #ksp #build #performance #kotlin https://android-developers.googleblog.com/2021/02/announcing-kotlin-symbol-processing-ksp.html?m=1
the developer diary
182
Небольшая статья о том, что kapt таски продолжают выполнятся в unit тестах, даже если там нет annotation processors. Что с этим делать? Как жить дальше? #kapt #tests #performance #build https://www.zacsweers.dev/kapts-hidden-test-costs
the developer diary
188
Doodle web UI framework, написан на чистом Kotlin/JS. Как я понял большая часть реализации идёт через Kotlin DSL. Встроен DI framework Kodein. Внутри также использует и другие MPP библиотеки. Стоит посмотреть на реализацию повнимательнее. #kotlin #web #ui #library #framework #js #mpp https://github.com/nacular/doodle/tree/v0.4.0
the developer diary
193
В Kotlin 1.4.30 завезли поддержку init блока для inline классов, а также поддержку модификаторов доступа. Неплохой подгон, нужно будет опробовать. #kotlin #inline #improvements https://msfjarvis.dev/posts/improvements-to-inline-classes-in-kotlin-1-4-30
the developer diary
228
Интересный kotlin compiler plugin, который делает `when` чуточку умнее, позволяя не использовать в некоторых моментах ветку else, если в этом нет смысла, так как все необходимые условия, которые возможны, были перечислены до этого. #kotlin #plugin #when #exhaustive https://github.com/cashapp/exhaustive
the developer diary
245
Есть такая сущность как BottomSheetDialogFragment, по стечению рукожопных обстоятельств эта сущность не может корректно работать с adjustResize на некоторых девайсах (onePlus, sony xperia). Для решения подобных ситуаций рекомендуется великолепно оформленный костыль в виде отдельного стиля для этой сущности. Стиль обязательно должен содержать отключение floating составляющей у window (windowIsFloa ...
the developer diary
257
Вот это поворот: "Deprecate Kotlin Android Extensions compiler plugin" Теперь понятно, почему во всех официальных источниках убрали упоминание об этом plugin. Команда Kotlin сделала ставку в пользу View binding, который завезли с новым AGP. Хорошо хоть Parcelize вынесли из Kotlin Android Extensions. #android #ui #extensions #binding #kotlin #parcelize #plugin https://github.com/JetBrains/ko ...
the developer diary
268
Обертки Jetpack Compose для библиотек по загрузке и отображению изображений. Поддерживает на данный момент Picasso, Glide, Coil, но написано просто, добавить что либо еще не будет проблемой, например Fresco. Разбито на модули, поэтому подключаешь только то, что реально нужно. #compose #library #images #android #ui https://github.com/wasabeef/composable-images
the developer diary
243
Яндекс.Диск стал использовать Kotlin Multiplatform Mobile в production. Интересно, что им не подошёл Ktor для сетевого слоя и они написали свою лёгкую обёртку. Для хранения данных они используют SQLDelight, что по факту хорошее решение из за подхода, который используется в этой библиотеке. #kotlin #mpp https://twitter.com/kotlin/status/1308421864251961347?s=19
the developer diary
243
У ребят из Square есть интересное решение для Dagger в виде kotlin compiler plugin - Anvil, который чем то похож на Hilt. Но самое главное то, что у них есть в качестве экспериментальной feature генерация Dagger фабрик, то есть их plugin берет эту часть на себя и убирает работу Kapt, как дополнение генерация кода идет сразу на Kotlin, это также убирает вызов доп задачи сборки. По понятным причина ...
the developer diary
260
Jetpack Compose теперь в Альфа. Интересно то, что появилось preview, которое позволяет быстро посмотреть изменения без установки на device, то есть preview вроде такое же, как и для разметки в XML, это очень круто. Также есть поддержка просмотра разных случаев в одно время, как пример: светлая/темная тема, увеличенный шрифт и так далее. #android #ui #compose #kotlin #dsl #library https://andro ...
the developer diary
230
В Gradle 6.6 появилась экспериментальная feature кэширование данных конфигурации. Это позволило прилично ускорить build, приблизительно в 3 раза для assemble. Для многомодульных проектов это победа. #tools #build #gradle #configuration #performance https://blog.gradle.org/introducing-configuration-caching
the developer diary
216
Ребята из Square, в частности Jake, разработали library для удобного тестирования flow из Kotlinx.Coroutines. Довольно интересная реализация, также сразу с поддержкой MPP. Как описано в Readme, в отличии от collect exceptions продолжают приходить как events, что очень полезно в тестировании. Стоит попробовать. #kotlin #flow #coroutines #test #library https://github.com/cashapp/turbine
the developer diary
236
Jake Wharton создал adb tool который позволяет события о нажатиях и т.д. на одном девайсе передавать на другой девайс, тем самым выполнять одни и теже действия на нескольких девайсах одновременно. Для его работы необходим Kotlin и ADB. Хороший пример использования, который был приведен в этом же репозитории, это одновременно смотреть как что то выглядит и отрабатывает в темной и светлой теме, но ...
the developer diary
236
В новой Android Studio 4.0 появилась интересная library desugaring, короткое название L8. Благодаря этому инструменту теперь есть возможность использовать Java API 8+ на старых устройствах. Этой возможностью воспользовался Zac Sweers, и представил library для работы с java.time на старых девайсах, которое включает в себя большую часть изменений timezones. Как работает его library описано в его с ...
the developer diary
219
Не так давно Google выпустила новую версию библиотеки recyclerview, в которой добавила MergeAdapter. В этой статье на простом примере показаны некоторые возможности этого adapter. #android #recyclerview #adapter #library https://blog.yudiz.com/merge-adapter-merge-your-lists-seamlessly-in-android/
the developer diary
236
Не так давно Google анонсировала KSP (Kotlin Symbol Processing), как дальнейшую замену Kapt. Судя по статье Zac Sweers, KSP быстрее, чем Kapt, так как использует немного другой подход и запускает меньше тасок. Учитывая как kapt может медленно работать это хорошая новость, также возможно KSP подружат с default методами в Kotlin interface. В статье есть пример перевода на этот новый API, небольшой ...
the developer diary
219
Интересное привалило со стороны Dagger. В Dagger завезли Hilt, который был создан для упрощения работы с dagger и Android сущностями, то есть это полноценная замена текущему dagger-android. Есть интересные идеи, и как я понял все это работает на патчинге байт-кода. Например, одно из этого проставление аннотации Hilt над activity, которой больше не нужно прописывать код в модуле для генерации sub ...
the developer diary
206
Сорцы приложения живых обоев из Героев 3. Написано на Kotlin, стоит посмотреть как реализовано. В отзывах есть жалоба на забивание процесса. #kotlin #app #wallpaper https://github.com/IlyaPomaskin/h3lwp
the developer diary
217
Jake написал тулзу для командной строки, которая помогает делать автоматический backup своего репозитория с любого git хостинга. Там же лежит Docker image для этого всего. Apocalypse of git hostings, We are prepared! #tools #command_line #git #rust https://github.com/JakeWharton/gitout
the developer diary
219
Представили StateFlow, полную замену ConflatedBroadcastChannel. Принцип работы похож на BehaviorSubject из Rx. Таким образом теперь есть холодные flow и горячие flow (StateFlow), также представлен метод конвертации из одного в другое. #kotlin #coroutines #channels #flow https://github.com/Kotlin/kotlinx.coroutines/issues/1973
the developer diary
216
Отличное сравнение работы collections и работы sequences, даже учли тот момент, что у collections в обязательном порядке происходит inline. Рассмотрены различные операторы, какие то больше подходят для использования sequences, какие то для collections. #kotlin #collections #sequences #performance https://proandroiddev.com/collections-vs-sequences-war-of-use-cases-1f2ca06a8ac4
the developer diary
209
Статья про CameraX, рассказывают про некоторые возможности и показывают простую реализацию focus, zoom. Очень хорошо, что тестирование данного API проходит на огромном количестве устройств благодаря Google Lens. Когда будет production ready, можно затащить себе, пока что это beta, а какие то части ещё в alpha. #android #camera #library #camerax https://medium.com/androiddevelopers/whats-new-i ...
the developer diary
198
Интересный проект, который позволяет через веб посмотреть bytecode небольшого куска кода, поддерживает различные SDK в том числе и Kotlin. Сам проект написан на Kotlin. #tools #kotlin #bytecode https://github.com/yawkat/javap
the developer diary
209
Вот и подробная статья про View binding, который появится в Android Gradle plugin начиная со студии 3.6. В статье также есть небольшое сравнение с текущими способами избавления от fib. Плюс этого решения, что уже можно будет использовать его во ViewHolders, а ...
Butter Knife помечена как deprecated. Jake Wharton рекомендует использовать View binding, которые появились в AGP начиная со студии 3.6. #android #view #library #as #plugin https://twitter.com/JakeWharton/status/1242537704887406593?s=09
the developer diary
225
Jake Wharton создал plugin для поддержки методов которые есть в новых версиях Java и которых ещё нет в android.jar, сделал он это с помощью D8/R8 tools. Очень интересный подход. #plugin #android #tools #d8 #r8 #apis https://twitter.com/JakeWharton/status/1233108590908579840?s=19
the developer diary
202
#android #tools #as Новая стадия ухода от fib(findViewById), сначала убрали кастинг, теперь добавили code generation, для автоматического биндинга. В AS 3.6 Canary 11 достаточно этого: 'binding.myViewId'. https://twitter.com/androidstudio/status/1171850449181216769?s=09 ...
Вот и подробная статья про View binding, который появится в Android Gradle plugin начиная со студии 3.6. В статье также есть небольшое сравнение с текущими способами избавления от fib. Плюс этого решения, что уже можно будет использовать его во ViewHolders, а также как я понимаю вне Android сущностей, что давал нам Layout Container из Kotlin синтетиков, который до сих пор experimental. #android # ...
the developer diary
207
Kotlin Compiler Plugin который выводит на новый уровень отображение asserts. Так как использую их в тестах думаю может отлично пригодиться, все таки получается довольно читаемая структура, которую проще понимать, чем обычный stacktrace, несущий мало информации о состоянии на момент вызова assert. Интересно и то, что используется в данном плагине новый IR backend для Kotlin компилятора. #plugin ...
the developer diary
217
#tools #di #library #dagger #viewer #graph Тулза для, возможно, удобного просмотра графа зависимостей. Стоит посмотреть как работает и насколько замедляет build, так как это plugin, который генерирует спец файлы + png для отображения графа. Также стоит посмотреть есть ли поддержка dagger_android. https://github.com/arunkumar9t2/scabbard
the developer diary
221
#tools #log #library #performance - Logging facade это просто. - Ага разбежался. По заявлениям разработчика библиотеки это очень быстрый facade, подойдет для тех у кого performance это основной показатель. Что интересно позволяет лениво использовать аргументы (привет asserts from kotlin), хотя как заметили в issues, необходимо посмотреть на аллокацию lambdas. Замеры проводились через JMH. ht ...
the developer diary
240
#tools #proto #viewer #command_line ProtoViewer работающий через command line/browser. Может деcериализовать и вывести значения из proto, делает он это через hex-encoded proto message или бинарник. Jake Wharton активно разрабатывает этот tool. https://github.com/mattprecious/protogram
the developer diary
250
#android #views #ui #coroutines #animations Интересная идея использования coroutine builders для отслеживания конца анимаций, либо layout процесса и так далее, от Chris Banes. Позволяет избавиться в какой то мере от callbacks и перейти на очевидные решения почти для каждого, просто используя мощь suspend. https://medium.com/androiddevelopers/suspending-over-views-19de9ebd7020
the developer diary
246
#android #tools #command_line #api Наткнулся на полезный инструмент для командной строки, называется Droid. Он простой как валенок, позволяет узнать краткую информацию о конкретной версии Android API, в частности: саму версию, именование версии, api level и когда был релиз этой версии. Работает быстро, достаточно вызвать droid list и выдаст список с информацией по всем API, частенько такую информ ...
the developer diary
239
#kotlin #coroutines #channels #flow Небольшая статья про Flow API, в ней автор кратко рассмотрел как использовать этот API, также привел несколько примеров добавления своих операторов. https://ahsensaeed.com/introduction-new-kotlin-coroutine-flow-api/
the developer diary
234
#android #ui #performance #tools Такой класс как Choreographer может оставлять в логах информацию о пропущенных кадрах, например: Skipped <number> frames! Но делает он это по умолчанию только если было пропущено 30 и более кадров, это довольно приличное количество. Для уменьшения этого числа, что бы отлавливать даже малейшие залипания интерфейса, можно сделать также как предлагают в этой статье: ...
the developer diary
226
#kotlin #jvmdefault #compatibility Zac Sweers из Uber рассказал про интересную особенность аннотации @JvmDefault, которая была создана для обратной совместимости с Java, а точнее с default methods в interface. Она позволяет не только добавить совместимости, но и уменьшить количество сгенерированного кода в jbytecode для методов с дефолтными параметрами. https://www.zacsweers.dev/jvmdefault-more- ...
the developer diary
223
#kotlin #recursion #ycombinator #performance Великолепная статья о recursion, точнее о том, как снова можно поверить в recursion после Java. Автор рассказывает зачем нужен tailrec и каким образом он превращает recursion в loop в jbytecode. Помимо этого есть интересные примеры ycombinator. https://proandroiddev.com/kotlin-pearls-8-recursion-tailrecursion-and-ycombinator-in-kotlin-3ec6975e9b6
the developer diary
214
#android #tests #ui #library Не так давно вышла библиотека от Kaspersky для UI автотестов - Kaspresso, основанная на отличной библиотеке Kakao. Плюс этого фреймворка в более удобном API, также с ним можно использовать фреймворк для adb, допустим для скачивания файлов или для работы с сенсорами. Более подробно узнать о плюсах и возможностях можно в этой статье. https://m.habr.com/ru/company/kas ...
the developer diary
226
#android #tools #as Новая стадия ухода от fib(findViewById), сначала убрали кастинг, теперь добавили code generation, для автоматического биндинга. В AS 3.6 Canary 11 достаточно этого: 'binding.myViewId'. https://twitter.com/androidstudio/status/1171850449181216769?s=09
the developer diary
222
#library #kotlin #android #ui Интересная альтернатива Constraint Layout и подобным от Square, удобное написание в коде, а не в xml. Стоит попробовать. https://github.com/square/contour
the developer diary
215
#library #kotlin #coroutines #channels #flow #android #ui Flow вышел в stable, а за ним также вышла интересная обвязка для android views использующая flow/channel/actor. Разработчик вдохновлялся RxBinding от Jake Wharton. Необходимо посмотреть поближе. https://github.com/LDRAlighieri/Corbind
the developer diary
223
#article #android #ui #text Отличная статья про отрисовку текста в Android и про TextView. Довольно подробно рассказано из каких элементов состоит процесс отрисовки текста. Помимо этого, в статье есть хороший пример работы с annotations и рассмотрены некоторые новые возможности из последних версий Android. https://habr.com/ru/company/redmadrobot/blog/461787/