Forwarded from Android Broadcast
В новом видео показываю как настроить публикации для Android и Kotlin Multiplatform библиотеки в Gradle с новым механизмом подписи артефактов для Maven Central в 2024
#AndroidBroadcast #видео #gradle #maven #kmp #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍4
🎉 KAPT переезжает на K2 и теперь будет работать в этом режиме
#kotlin #kapt #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉29👍6
🎉 Вышла KotlinX Coroutines 1.10.1
Что нового:
👉 Kotlin 2.1.0
👉 Новые терминальные операторы Flow.any, Flow.all и Flow.none для проверок, аналогичных коллекциям. Будьте внимательные, что для бесконечных Flow вы можете не получить результата
👉 Сделали реорганизацию кода в
🛠 Исправление багов
Что нового:
👉 Kotlin 2.1.0
👉 Новые терминальные операторы Flow.any, Flow.all и Flow.none для проверок, аналогичных коллекциям. Будьте внимательные, что для бесконечных Flow вы можете не получить результата
👉 Сделали реорганизацию кода в
kotlinx-coroutines-debug
and kotlinx-coroutines-core
🛠 Исправление багов
🎉33👍9
Вышла Dokka 2.0 - инструмент для генерации API документации Kotlin кода.
Что нового:
👉 Обновленный Gradle плагин, работающий на Dokkatoo.
👉 Экспериментальная поддержка Kotlin K2
👉 Улучшения в генерируемом HTML
#kotlin #документация
Что нового:
👉 Обновленный Gradle плагин, работающий на Dokkatoo.
👉 Экспериментальная поддержка Kotlin K2
👉 Улучшения в генерируемом HTML
#kotlin #документация
🔥28👍1
MockK - библиотека мокиоования для Kotlin кода. Поддерживает корутины, Android, Spring и др. популярные технологии
Статья серии (EN):
#тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
В процессе дебага корутин вы могли столкнуться с тем что переменная "was optimized out", что является результатом оптимизиации state машины под капотом корутины.
Для того чтобы вся информация оставалась можно во время работы в IDEA включать debug режим работы Kotlin.
kotlin {
compilerOptions {
// Код запускается из IDEA/Android Studio
if (System.getProperty("idea.active") == "true"){
// Включаем режим дебага
freeCompilerArgs = listOf("-Xdebug")
}
}
}
#kotlin #idea #androidstudio #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥12
KotlinX Coroutines уже давно обзавелись своим BOM-ом, подключайте
#kotlin #gradle #coroutines
dependencies {
implementation(platform(libs.kotlinx.coroutines.bom))
implementation(libs.kotlinx.coroutines.core)
}
#kotlin #gradle #coroutines
🔥35👍10
💉 Вышел официальный Koin плагин для Idea/Android Studio
Выпустили раннюю версию плагина Koin для Idea и Android Studio, чтобы решить проблемы с отсутствием проверки графа во время валидации и улучшения опыта работы с библиотекой.
В текущей версии доступен просмотр дерева конфигурации Koin, включающий модули, компоненты и зависимости. Также есть навигация между компонентами и зависимостями, что избавляет от поиска по кодовой базе.
Пока нет поддержки разделения на модули, граф строится один на всё. В будущем уже будет множество фичей. Авторы считают, что проверка графа в IDE лучше, чем только во время компиляции, и обеспечит анализ использования Koin в реальном времени.
На текущий момент доступ к плагину можно получить только через оформление заявки (я доступ получил и буду рассказывать детали).
#koin #di #androidstudio #idea
Выпустили раннюю версию плагина Koin для Idea и Android Studio, чтобы решить проблемы с отсутствием проверки графа во время валидации и улучшения опыта работы с библиотекой.
В текущей версии доступен просмотр дерева конфигурации Koin, включающий модули, компоненты и зависимости. Также есть навигация между компонентами и зависимостями, что избавляет от поиска по кодовой базе.
Пока нет поддержки разделения на модули, граф строится один на всё. В будущем уже будет множество фичей. Авторы считают, что проверка графа в IDE лучше, чем только во время компиляции, и обеспечит анализ использования Koin в реальном времени.
На текущий момент доступ к плагину можно получить только через оформление заявки (я доступ получил и буду рассказывать детали).
#koin #di #androidstudio #idea
👍49🔥11
Как проверять изменения API между версиями библиотеки (EN,9м)
В статье рассказывается как библиотека должна следить за изменениями API, чтобы была совместимость между версиями и упростить миграцию пользотвалям. Приводится пример использования утилиты Binary Compatibility Validator для автоматизации проверки API совместимости
#kotlin #инструменты #jvm
В статье рассказывается как библиотека должна следить за изменениями API, чтобы была совместимость между версиями и упростить миграцию пользотвалям. Приводится пример использования утилиты Binary Compatibility Validator для автоматизации проверки API совместимости
#kotlin #инструменты #jvm
👍19🔥2
Итоги 2024 года для 🏝 @kotlin_broadcast
Я и вся команда проекта уходит на новогодние каникулы. Увидимся с вами после праздников в 2025!
Я и вся команда проекта уходит на новогодние каникулы. Увидимся с вами после праздников в 2025!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉50👍9
Вышел KotlinX Serialization 1.8.0
👉 Аннотация @JsonIgnoreUnknownKeys - позволит игнорировать неизвестные ключи для отдельных классов, а раньше только можно было для всех классов
👉 Стабилизация SerialDescriptor API и @SealedSerializationApi
👉 Для Java 8 и выше теперь генерируются реализации методов по умолчанию в интерфейсах. Для совместимости работы с предыдущей версии сгенерированного кода добавьте опцию
🛠 Исправления и небольшие улучшения
#kotlin #kotlinx
👉 Аннотация @JsonIgnoreUnknownKeys - позволит игнорировать неизвестные ключи для отдельных классов, а раньше только можно было для всех классов
👉 Стабилизация SerialDescriptor API и @SealedSerializationApi
👉 Для Java 8 и выше теперь генерируются реализации методов по умолчанию в интерфейсах. Для совместимости работы с предыдущей версии сгенерированного кода добавьте опцию
all-compatibility
🛠 Исправления и небольшие улучшения
#kotlin #kotlinx
👍22🔥10
Immutable Arrays - альтернатива List из Kotlin с аналогичным API, но с настоящей иммутабельностью, лучшей оптимизацией и как итог - лучшей производительностью по сравнению с Array и List!
#kotlin
#kotlin
👍67❤1
Если вы хотите понять как устроен компилятор Kotlin, то изучите репозиторий. Там описаны понятия и принципы + даются полезные ссылки по темам
#kotlin #подкапотом
#kotlin #подкапотом
❤24👍13🔥3
Используйте билдеры коллекций из стандартной библиотеки Kotlin
Иногда сталкиваюсь с кодом функций в Kotlin
Вместо такого подхода я использую функцию buildList(MutableList<E>.() -> Unit), которая принимает на вход лямбду для наполнения коллекции
Помимо этого функция buildList() позволяет задать capacity - ожидаемое количество элементов в списке (если вы конечно можете это понять). Например,
Задание
Смотрите также функции buildMap() и buildSet()
#kotlin
Иногда сталкиваюсь с кодом функций в Kotlin
val list = mutableListOf()
list.add(...)
list.add(..)
// другие добавления в коллекцию
return list.toList()
Вместо такого подхода я использую функцию buildList(MutableList<E>.() -> Unit), которая принимает на вход лямбду для наполнения коллекции
return buildList {
add(...)
add(...)
// другие добавления в коллекцию
}
Помимо этого функция buildList() позволяет задать capacity - ожидаемое количество элементов в списке (если вы конечно можете это понять). Например,
// задаю capacity на основе максимального ожидаемого кол-ва элементов
return buildList(capacity = 2) {
add(...) // Добавление 1 элемента
if (conidition()) add(...) // Возможное добавление 1 элемента
}
Задание
capacity
позволяет выделять необходимое количество элементов в массиве, где хранятся элементы. Это позволит избежать использование лишней памяти и/или необходимости увеличения массива в процессе наполнения коллекцииСмотрите также функции buildMap() и buildSet()
#kotlin
👍100🔥28
EitherNet - KMP библиотека для удобной работы с ответами из сети, когда нужно обработать различные типы ответов и не хочется всё это ловить через NetworkException.
Очень давно я делал видео (доступно на YouTube) как сделать такую же обёртку и зачем это нужно
#kotlin #kmp #jvm #android #ios #wasm #js
Очень давно я делал видео (доступно на YouTube) как сделать такую же обёртку и зачем это нужно
#kotlin #kmp #jvm #android #ios #wasm #js
👍28
Чтоб скрыть детали реализации внутри библиотеки, иногда авторы используют классы с внутренней реализацией. Я такой подход использовал в ViewBindingPropertyDelegate для сокрытия реализации и отказа от if:
Если бы я не использовал внутреннюю реализацию, то подход был бы такой:
Подобный подход используют в KMP, например Jetpack ViewModel. Также скрываются реализации различных lazy делегатов в Kotlin, но через фасад метода с параметром
#kotlin #AndroidBroadcast #БазаЗнаний
public object ViewBindingCache {
private var impl: ViewBindingCacheImpl = ViewBindingCacheImpl.Noop
internal fun <T : ViewBinding> getInflateWithLayoutInflater(
viewBindingClass: Class<T>
): InflateViewBinding<T> {
return impl.getInflateWithLayoutInflater(viewBindingClass)
}
internal fun <T : ViewBinding> getBind(
viewBindingClass: Class<T>
): BindViewBinding<T> {
return impl.getBind(viewBindingClass)
}
public fun clear() {
impl.clear()
}
public fun setEnabled(enabled: Boolean) {
impl = if (enabled) ViewBindingCacheImpl.Default() else ViewBindingCacheImpl.Noop
}
}
private sealed interface ViewBindingCacheImpl {
class Default : ViewBindingCacheImpl { ... }
data object Noop : ViewBindingCacheImpl
}
Если бы я не использовал внутреннюю реализацию, то подход был бы такой:
public object ViewBindingCache {
private var cacheEnabled = false
private val cache = mutableMapOf<...>()
internal fun <T : ViewBinding> getInflateWithLayoutInflater(
viewBindingClass: Class<T>
): InflateViewBinding<T> {
if (cacheEnabled) {
return ...
} else {
return ...
}
}
internal fun <T : ViewBinding> getBind(
viewBindingClass: Class<T>
): BindViewBinding<T> {
if (cacheEnabled) {
return ...
} else {
return ...
}
}
public fun clear() {
...
}
public fun setEnabled(enabled: Boolean) {
cache.clear()
this.cacheEnabled = enabled
}
}
Подобный подход используют в KMP, например Jetpack ViewModel. Также скрываются реализации различных lazy делегатов в Kotlin, но через фасад метода с параметром
fun <T> lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy<T>
#kotlin #AndroidBroadcast #БазаЗнаний
🔥12👍7
ADB GUI Desktop - KMP Desktop приложения для выполнения ADB с открытым исходным кодом. Дистрибутива нету, запуск только из исходников
#kmp #desktop
#kmp #desktop
👍25
Подробная статья о том, что происходит при вызове функции cancel() - отмене корутине, а именно рассказывается про:
👉 Классы Job и JobSupport
👉 Состояния Job
👉 Как работает отмена в Structured Concurrency
👉 Коммуникация между родительской и дочерней Job
👉 Как отменяется функция delay()
👉 Как отменяются suspend функции
#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍6❤2