We Love Android – Telegram
We Love Android
634 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Насмотренность — важный навык в работе дизайнера. Это то что помогает быть в тренде, учиться на чужом опыте, черпать вдохновение, отличать хороший дизайн от плохого, критически оценивать свою работу и так далее. Нет вы не ошиблись каналом, просто я считаю, что насмотренность важна и разработчикам. Чем больше чужого кода смотришь — тем лучше пишешь свой. Просто потому что больше новых приёмов и концепций узнаёшь, улучшаешь свой скилл владения языком. С хэштегом #насмотренность буду писать про всё интересное на что наткнулся при просмотре open-source проектов. Это первый пост :)

👀 Companion object
Чаще всего companion object используется просто как замена статическим методам и полям из Java. А ведь companion object это в первую очередь object и как у любого другого объекта у него может быть имя и он может реализовывать интерфейсы и наследоваться от других классов. Сегодня будет два примера таких companion object'ов.

☝️ Json в kotlinx.serialization
Это класс, но мы можем использовать его как-будто он object:
val result = Json.decodeFromString("42")

Всё потому что companion object у Json реализует класс Json:

companion object Default : Json(JsonConfiguration(), EmptySerializersModule())

Зачем так сложно, если можно было бы просто объявить object Json? Потому что тогда не было бы возможности создать свой инстанс, а когда Json это класс, такая возможность остаётся.

✌️CoroutineContext.Key в kotlinx.coroutines
CoroutineContext вообще интересная штука. По сути это что-то между Map и Set. Каждый элемент контекста хранится в CoroutineContext по ключу и получить элементы контекста можно через оператор get.
Каждый ключ должен быть singleton'ом и ключ должен быть у каждого элемента контекста (Job, CoroutineDispatcher и т.д.). Идеальная задача для companion object!

У каждого элемента контекста companion object это реализация CoroutineContext.Key и смотрите какая красота получается в совокупности с оператором get у CoroutineContext:

val job = coroutineContext[Job]
val dispatcher = coroutineContext[CoroutineDispatcher]

Выглядит как-будто получаем элемент контекста по типу. На самом деле используется companion object c типом Key, объявленный в этих классах. Например, в Job он выглядит так:

companion object Key : CoroutineContext.Key<Job>
🔥7👍2🤔2
Forwarded from Mobile Native ️️
10 Useful Kotlin Extension Functions for Android Developer

Еще один большой набор полезных Kotlin Extension функций для удобного использования.

👉 Print to Logcat
👉 View Visibility
👉 Toast Message
👉 Snackbar Message
👉 Hide Keyboard
👉 dp and px conversion
👉 Digit, Alphabetic, and Alphanumeric Check
👉 isNull, ifNull
👉 Date Formatter

Читать (En)
🔥3👍21
Forwarded from Записки разработчицы (Anna Zharkova)
Врываемся с хорошими новостями в эту пятницу. Открыт для обсуждения proposal о внесении статиков в Kotlin
https://github.com/Kotlin/KEEP/issues/348
👍1🤔1
Forwarded from Kotlin Multiplatform (Kostya)
https://medium.com/@bchoi000/sunflower-flavor-kmm-get-started-with-kotlin-multiplatform-mobile-9dc014c45b95

Все, наверное, видели официальное приложение гугла Android Sunflower with Compose, которое демонстрирует лучшие практики в разработке приложений под Андроид, по мнению гугл! 🙌
Так вот, Ethan Choi взял и по шагам перевел приложение на Kotlin Multiplatform и реализовал нативный UI на iOS. 🤩
Очень круто! 🥳
👍2🔥2
Forwarded from Mobile Native ️️
Easy caching Android + Kotlin + Flow

Статья с примером организации кеширования (Cached Source) с разными опциями(NEVER, IF_FAILED, IF_HAVE, ONLY, CACHED THEN LOAD) в связке Kotlin + Coroutines + Flow.

Пример кода на GitHub → Universal Cache

Читать (En)
🔥6👍2
Forwarded from red_mad_dev
・Senior iOS-разработчик red_mad_robot Аня Кочешкова рассказала, чем отличаются три менеджера зависимостей, в каких случаях и для каких задач подойдёт тот или иной. Аня подробно объяснила, что такое семантическое версионирование, как устроены модули кода и в чём разница между динамическими и статическими библиотеками. Материал будет полезен джунам, которые только начали погружаться в разработку.

・Head of Android red_mad_robot Central Asia Влад Бауэр поделился опытом, как решил нехватку iOS-разработчиков на одном из внутренних проектов. Он придумал решение: пошарил часть кода и перенёс его в Kotlin Multiplatform Mobile. Спойлер: у Влада получилось, и теперь он рассказывает о нюансах, с которыми ему пришлось столкнуться.

#ios #android #kotlin
👍2🔥2
Forwarded from Android Broadcast (Кирилл Розов)
Инструкция по реализации собственного виджета для выбора времени (Time Picker) на Jetpack Compose

#compose
👍3🔥2😱1
Forwarded from Android Broadcast (Кирилл Розов)
Rebugger - простая утилита для Compose, которая позволяет отслеживать изменения в заданных аргумента и выводить причины рекомпозиции в Logcat.

#compose #tooling
👍6🔥2
😁72👍2
Серёжа Чумиков сделал классный доклад про оптимизацию количества рекомпозиций в Compose. Если формат видео вам заходит больше чем статьи — вот оно!

По секрету скажу, что есть ещё одна запись доклада — про анимации. Надеюсь её тоже выложат.

#compose
🔥3👍1
Forwarded from Mobile Native ️️
Чем новее, тем лучше: как мы с GSON на Kotlinx.Serialization переезжали

Подводные камни, неочевидные моменты библиотеки Kotlinx.Serialization и сравнение ее работы с популярной Gson.

P.S. А я предпочитаю Moshi =))

Читать (Ru)
👍3🔥1
Forwarded from Android Guards
Оказавшись без любимого набора инструментов - можно и приуныть. Но не нужно. Используя только стандартные утилиты из Android SDK можно сделать многое. Рассмотрим на примере aapt2, adb и apkanalyzer:
- aapt2 dump strings target.apk | grep -E '[a-fA-F0-9]{32}' - найти все md5 хэши в приложении
- aapt2 dump xmltree target.apk --file AndroidManifest.xml - получить содержимое манифеста
- adb shell screenrecord /sdcard/demo.mp4 - записать видео с экрана
- adb shell dumpsys package my.target.app - получить много полезной информации о приложении. Например - какие диплинки оно обрабатывает
- adb shell input text <string> - ввести текст в выбранное поле ввода
- apkanalyzer manifest print target.apk - получить содержимое манифеста в xml формате
- apkanalyzer dex code --class com.google.crypto.tink.proto.JwtRsaSsaPkcs1PrivateKey target.apk показать smali-код класса из apk
И все это работает без декомпиляции apk файла. При чем, работает очень быстро. Узнать больше о стандартных cli утилитах можно здесь.
#aht
🔥4👍1
Forwarded from addmeto (Grigory Bakunov)
“Google в шоке, так как Samsung рассматривает возможность перехода на Bing в качестве поисковой системы по умолчанию на телефонах Galaxy”, — такой заголовок у статьи на sammobile, но это конечно преувеличение. Думаю, Гугл останется поиском по умолчанию на самсунге, просто цена за предустановку немножко возрастет.

https://www.sammobile.com/news/samsung-galaxy-phones-tablets-bing-search-replace-google-default-search-engine/
🤔4😱2👍1
Forwarded from Mobile Developer (Алексей Гладков)
Небольшой опрос общественного мнения Если бы вы начали делать новый проект, то какую технологию бы выбрали?Небольшой опрос общественного мнения Если бы вы начали делать новый проект, то какую технологию бы выбрали?
Anonymous Poll
67%
Native (Swift, Kotlin)
42%
Kotlin Multiplatform
12%
Flutter
1%
React Native
3%
Что-то другое
Forwarded from Android Broadcast (Кирилл Розов)
Problem solving in Compose Text (14 мин)

В статье разбирается несколько способов решения задачи по отрисовке текста в 2 строки, который надо выровнять по центру в контейнере. Хороший разбор нескольких вариантов с подробностями работы Compose. Рекомендую!

#compose
🔥2👍1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Рецепты решения популярных задач на корутинах
👉 Asynchronous map
👉 Ленивая инициализация в suspend функции
👉 Переиспользование соединений
👉 Гонка между корутинами
👉 Повторное выполнение suspend функции

Репозиторий с кодом

#coroutines
👍1🔥1
Forwarded from Mobile Native ️️
Migrate your build configuration from Groovy to Kotlin

Надеюсь уже все видели (раз, два и три) о том, что Kotlin DSL теперь будет использоваться по умолчанию в Gradle скриптах вместо Groovy.

Поэтому, для тех, кто еще не мигрировал, оставляю список полезных ссылок👇

👉 Migrate your build configuration from Groovy to Kotlin
👉 Migrating build logic from Groovy to Kotlin
👉 What is Gradle Kotlin DSL
👉 Kotlin DSL: Gradle noscripts in Android made easy
👉 Migrate from Groovy to Kotlin DSL
👍2🔥1😱1