Telegram Web
Sync speedup в Gradle
#gradle

Вечная тема для Android-разработчиков — уменьшение времени сборки и ускорение Gradle.
Вот вам ещё одна улучшайка в копилку, сам пока не пробовал, но выглядит любопытно.

Автор обратил внимание на добавляемые репозитории в проект и решил посмотреть на то, куда уходит время при синке. Выяснилось, что много времени уходит на попытки получения зависимостей в тех репозиториях, где их нет, из-за чего sync увеличивается по времени.

Недолгий research показал, что можно добавить параметры exclusiveContent и content для каждого из репозитория, указывая там группы репозиториев.
Ещё интересный фикс — это настройка порядка репозиториев, оказывается он тоже влияет на скорость синка. Может сгодиться как быстрый фикс.

У автора получилось уменьшить время sync с почти 6 минут до 3 минут 17 секунд, что выглядит крайне круто. 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥52
Practical Optimizations
#android #optimization

Для всех, кто любит низкоуровневые оптимизации и прочий хардкод — прекрасный доклад от Romain Guy, где он описывает целый набор оптимизаций, которые они сделали в Compose.

В целом, будет полезно всем разработчикам: можно научиться чуть лучше читать bytecode как минимум. А как максимум — сделаете крутую оптимизацию в своём проекте.

А вот тут почти то же самое, но в цикле статей, если вам так удобнее.
👍13❤‍🔥5
Kotlin: An Illustrated Guide
#kotlin

Сайт для новичков, который стоит добавить в закладки и опытным разработчикам — Dave Leeds on Kotlin.

Мне кажется, один из самых понятных и удобных гайдов по Kotlin, который я когда-либо видел. Примеры, забавные иллюстрации, простые примеры кода. Даже если вы знаете все темы — имеет смысл перечитать, ведь не всегда мы можем объяснить всё на пальцах так, чтобы поняла ваша бабушка.
А если вы новичок — можете смело начать изучение с этого гайда.

Последняя глава про Generic, а скоро ожидается про Coroutine.
🔥15👍104🤮2
Koala: New Terminal
#androidstudio

Я постоянный пользователь Beta-версий Android Studio. Мне почему-то везёт, и я не натыкаюсь на проблемы, которые мешают работе, поэтому всегда использую их вместо релизной версии.

И вот недавно в Android Studio Koala протестировал новый терминал. Выглядит гораздо удобнее, чем привычный нам. Поэтому спешу мотивировать вас использовать его как можно быстрее.

Если IDE не предложит попробовать его самостоятельно, то можно включить его в Settings/Preferences | Tools | Terminal | Enable New Terminal.

С визуальной точки зрения всё стало значительно симпатичнее, а что самое главное — теперь команды разделяются по блокам и по ним можно быстро перемещаться. 🔥
В повседневной работе это невероятно облегчает навигацию по огромной простыне списка.

Ещё одной киллер-фичей является автодополнение, удобная история команд, да и что говорить — цветовая тема и палитра.

В общем, как только обновитесь — обязательно включайте, ведь у вас появится ещё один удобный инструмент.

Тут можно почитать подробнее про все фичи, а также посмотреть на то, как всё выглядит.

Пробовали? Как вам?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍9👎3👌3
Интересное решение, а как делаете вы?
👍32🔥2
Forwarded from Android Good Reads (Anton Kondratiuk)
О создании Preview в Jetpack Compose

Как вы подкладываете и обновляете данные для @Preview? В статье предлагается:

👉 Хардкодить данные напрямую
👉 Класть все данные в обьект и подменять в процессе подстановки. А более аккуратный способ — это воспользоваться PreviewParameterProvider (Хорошо описано тут)
👉 Написать полноценный отдельный фабричный метод для описания состояния @Preview. Мне кажется что это оверинжениринг, только если вы не всецело полагаетесь на превью в работе
👉 Использование существующего state holder

У нас в команде решили для каждого UI-класса определять несколько mock() функций с основными кейсами. В итоге у нас есть базовые превью, а при переиспользовании всегда видны возможные коллизии на основных кейсах.
🔥9🤔6👍42
So You Think You Know Git
#git

В начале этой недели вдохновился видео про Git и решил поделиться им с вами.

Во всех командах, где я работал использовался Git и его знание даже не обговаривалось. В большинстве случаев хватает использования базовых сценариев и команд: типа push, pull, работа с git flow и т.д.

Однако, Git очень мощный инструмент, и тут есть невероятное количество команд, которые повышают удобство работы в команде. Вот о многих подобных командах можно узнать из видео.
Кто знает, может быть парочку из них и приживутся у вас в команде. А если и не приживутся — в любом случае где-нибудь в компании разработчиков можете понтануться знанием какой-то редкой фичи из Git 🤪
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥6👍4
Перенос приложения в Google Play
#google

Впервые делал перенос приложения с одного Google Dev аккаунта на другой.
Это может понадобиться по нескольким причинам, но, кажется, основная — это изменение всяких юридических данных компании.

И, как бы страшно это ни звучало — сделать перенос приложения довольно просто. Есть даже официальная дока от Google, как это сделать и которой, в принципе, достаточно.

Если кратко, то вам надо создать, оплатить и верифицировать новый аккаунт, а затем сделать request на перенос из вашего первого аккаунта.

Обязательно посмотрите, что можно перенести, а что нельзя. По сути, перенесётся вся информация, включая описание, отзывы, оценки, сервисы (Firebase тот же). В случае нашего приложения — пришлось заново добавить тестовые группы для скачивания приложения и отправить приглашения для доступа в консоль.

Так что — всё не страшно, вдруг этот пост понадобится вам когда-то в карьере. 🤟
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍71
Maven Central Portal в 2024 году
#gradle

С марта 2024 года публикация своей библиотеки через OSSRH портал больше недоступна, и публикация на Maven Central сейчас работает иначе.

Если вам есть необходимость публикации своей библиотеки — есть свежая инструкцикя, где по шагам описываются все нюансы публикации в текущих реалиях. Вдруг понадобится.
🔥7👍4
Data Object
#kotlin

С недавних пор IDEA (а именно с Kotlin 1.9) начала подчёркивать традиционный object и рекомендует заменить его на странный data object. Что за зверь такой и что он нам даёт? Давайте разберёмся.

При использовании sealed class или sealed interface мы могли добавлять разные стейты внутри его. Они могли быть как data class, так и object. Например:


sealed interface ProfileScreenState {
data class Success(val username: String): ProfileScreenState
object Error: ProfileScreenState
object Click Me Load More: ProfileScreenState
}


Однако, если мы захотели бы вывести результат в лог, то с data class все получилось бы хорошо, а вот с object — не очень: мы бы увидели только адреса, например:


com.dataobjects.example.ProfileScreenState$Click Me Load More@6d03e736
Success(username=exampleUser1)
com.dataobjects.example.ProfileScreenState$Error@5fd0d5ae


Можно было бы обмазаться старым добрым toString() для каждого объекта, но вместо этого — самое время использовать data object, где эта проблема полностью решена.

Хоть обновление и минорное, но заметно добавляет удобства при работе с подобными классами. 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍344👌2
Forwarded from Gorshkov Blog (Aleksandr Gorshkov)
Друзья, с Днём программиста! 💻🎉

Знаю, вы тут есть, и сегодня наш профессиональный праздник

Спасибо всем, кто каждый день решает сложные задачи, создаёт инновации и делает этот мир более технологичным. Пусть ваши проекты всегда компилируются без ошибок, а баги исчезают так же быстро, как и появляются! 🚀

Желаем вам вдохновения, новых вызовов и ещё больше успешных решений! Продолжайте менять мир!

P.S. на фото тортик от жены в честь праздника 🖤
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23🎉107👏5👍1
Kotin: in и out, ковариантность и контрвариантность
#kotlin #новичкам

Про in и out написано много, но новички всё равно часто путаются. К тому же, опрос выше показал, что многие разработчики не до конца понимают эту тему. Между тем, знание этой темы даёт ряд преимуществ, и на собеседованиях её часто спрашивают.

Вот одна из хороших статей на эту тему. В статье на примерах рассматривается использование in и out в generic-типах, рассказывается о том, как это было в Java, и приводятся основные юзкейсы, связанные с генериками.

Если вы новичок, то рекомендую прочитать, а профи — наверняка вы и так всё это знаете. 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6🗿4
Coil 3.x
#kotlin #compose

Отличная новость — вышла новая версия Coil, которая теперь поддерживает Kotlin Multiplatform на Android, JVM, iOS, macOS, JavaScript и WASM! Конечно, с поддержкой Compose Multiplatform. 🔥

Изменений немало:
🔴можно выбрать библиотеку для работы с сетью: Ktor или OkHttp. Без добавления зависимости будет работать только загрузка локальных или статичных изображений.;
🔴поменялся пакет для библиотеки, теперь надо мигрировать на io.coil-kt.coil3, что, в целом, не сложно сделать;
🔴в мультиплатформе всё отлично: помимо работы с Compose, заявлена полная поддержка coil-svg, а coil-gif и coil-video обещают добавить чуть позже (пока только на Android);
🔴целый ряд небольших, но важных изменений.

Как вам обновление? Используете эту библиотеку?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍43👌1
In Memory of Stiver
#java #jetbrains

Наверняка многие из вас слышали о смерти создателя «Флибусты» — Стивера, но не все знают, что он был отличным разработчиком и внёс значительный вклад в развитие языка программирования Java.

Недавно JetBrains выпустила статью в блоге о техническом вкладе Стивера.
Если кратко, он был автором декомпилятора Fernflower. Увлёкшись внутренним устройством виртуальной машины Java, Стивер пришёл к выводу о несостоятельности существующих декомпиляторов и создал собственный инструмент.

Со временем Fernflower был включён в IntelliJ IDEA, а код стал opensource. Этот инструмент сэкономил множество часов разработчикам и значительно упростил их работу.

Вот таким талантливым человеком был Стивер. Спасибо JetBrains за то, что рассказали об этом и продолжают развивать отличный инструмент!
32💯23🔥15👍1👏1
Про App Signing
#google #useful

Не все разработчики знают, что в Google Play можно изменить подпись приложения.

Это может быть полезно, если вдруг вы потеряли текущую подпись, или Google сгенерировал подпись для aab за вас — но сейчас надо делать обновление из других магазинов или APK.

Для управления подписями зайдите в Test and release -> Setup -> App signing. Нас интересует App Signing Key Certificate, который следует сравнить с текущим сертификатом. Если нужно сравнить с APK, используйте следующую команду:


apksigner verify --print-certs app.apk


Изменить подпись можно только с учётной записи владельца. Консоль предложит несколько вариантов, включая использование текущего сертификата.

При помощи утилиты perk.jar, которая, к слову, довольно глючная, надо выполнить команду, которая будет довольно детально описана после выбора пункта.
Если получите ошибку, попробуйте запустить утилиту на более старой версии JDK.

После успешного выполнения команды, надо загрузить обновлённый сертификат в консоль. И на этом всё. 🫡

Какие особенности есть?

1️⃣Подпись можно менять только раз в год, и изменения нельзя откатить. Поэтому обязательно проверьте всё несколько раз, прежде чем продолжить.

2️⃣Обновление ключа будет работать только для API версии выше 32. Для остальных версий оно будет проигнорировано, и сборки будут использовать старый ключ.

Подробнее об изменении подписи можно почитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥95🤣2👍1
When и Guard Conditions
#kotlin

С релизом Kotlin 2.1.0 появился апдейт для when — guard conditions. Эта новая фича улучшает читаемость кода, делая его более наглядным.
Давайте рассмотрим на примере, что она делает.

Предположим, есть базовый класс для получения ответа от сервера:

sealed interface HttpResult {
data class Success(val response: String) : HttpResult
data class Failed(val statusCode: Int) : HttpResult
}


Если включить Guard Conditions, то проверка в when специальных юзкейсов будет выглядеть так:

when (response) {
is HttpResult.Success -> println("Success")
is HttpResult.Failed if response.statusCode == 503 -> println("Maintenance")
is HttpResult.Failed -> println("Failed with code ${response.statusCode}")
}


Как мы видим, одну ошибку от бэка мы обработали без добавления if внутри условия:

when (response) {
is HttpResult.Success -> println("Success")
is HttpResult.Failed -> {
if (response.statusCode == 503) {
println("Maintenance")
} else {
println("Failed with code ${response.statusCode}")
}
}
}


Похоже, что стало удобнее, но нужно попробовать на практике.
Чтобы включить фичу, надо убедиться, что K2 Compiler включен, а потом добавить опцию:

kotlin {
compilerOptions {
freeCompilerArgs.add("-Xwhen-guards")
}
}


Чуть больше информации можно найти тут.
13👍9👎3🤔3
GitHub Wrapped
#git

Под конец года попался клёвый сервис для анализа активности в Github.
И как раньше никому эта идея не приходила в голову?

Если вдруг не учитываются приватные репозитории — в настройках профиля надо выбрать «Include private contributions on my profile».

Делитесь в комментариях своей статой, будем мериться сравнивать коммиты.
17🔥3👍2👌1
Друзья, поздравляю вас с наступающим Новым годом! 🎅

Этот год для канала выдался не самым продуктивным: мало постов и полезного контента для вас. Вероятно, самая банальная причина — самая верная: отсутствие желания и дисциплины.

Себе желаю исправиться и писать здесь регулярно. А вам желаю, чтобы все ваши желания исполнились, а новый год принёс как можно больше позитивных моментов! 🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄2553🥰2👍1🙏1
Optimised Out в Kotlin Coroutines
#kotlin #coroutines

Иногда при отладке coroutines можно увидеть сообщение «optimised out», из-за которого debugging усложняется.

Это связано с особенностями работы Kotlin coroutines и их преобразования в state machine. В таких случаях переменные, которые больше не нужны после точки остановки, очищаются, и становятся невидимыми для отладки. Кроме того, при использовании inline также выполняются оптимизации, скрывающие ненужные переменные.

Однако существует простая настройка, которая позволяет увидеть эти переменные и значительно упростить debugging. 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
👍154🔥4❤‍🔥2👎1
2025/08/24 15:58:16
Back to Top
HTML Embed Code: