Telegram Web Link
🏗 Функциональное программирование в Android. Знакомство с парадигмой (21м)

Первая статья из серии про как построить архитектуру Android приложения в функциональном стиле. Стек: Kotln; Jetpack Compose; одна из UDF-архитектур (Redux, TEA, MVI); ArrowKt; Coroutines + Flow.

В начале рассматривают функциональную парадигму и отличия ее от других подходов (императивный и декларативный)

#android #архитектура
🏝 Вышел Kotlin 2.2.0

Что нового в релизе языка:
👉 Превью context parametr
👉 Non-local break и continue теперь stable
👉 Kotlin/JVM: изменения в генерации метода по умолчанию
👉 Kotlin/Native: улучшения в управлением памятью
👉 Kotlin/Wasm: wasmJs таргет отделили от js таргета
🐘 Поддержка Gradle 7.6.3 - 8.14
👉 Base64 стало Stable

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Liquid Glass Compose - библиотека для переноса эффекта стекла из iOS на Android в Compose.

Поддерживается Android 7.0, а на Android 13 и выше используются AGSL шейдеры, что повышает производительность и добавляет блюр.

Автор библиотеки - подписчик канал и буде рад звезде на GitHub и вашему мнению по коду решения в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Пример Jetpack Media 3 Transformer API для создания приложения с обрезкой видео (EN,3м)

Разработчик решил реализовать простую затею - обрезать видео на основе выбранного отрезка текста из расшифровки дорожки. Использовал Jetpack Media3 и EventLabs API. ПО итогу вышло приложение 🐱 QuickTrim

🔗 Альтернативная ссылка тут

#android #androidjetpack #media3 #opensource #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from iOS Broadcast (Андрей Зонов)
🧰🐥 Разработка на Swift под Android
Внутри сообщества официально собирается рабочая группа по созданию Android приложений на Swift. Основная цель - добавить и поддерживать Android как официальную платформу для Swift
Задачи рабочей группы:
🔵Улучшение и поддержка поддержки Android в официальном дистрибутиве Swift
🔵Усовершенствование основных пакетов Swift для работы с идиомами Android
🔵Определение уровней поддержки платформы и работа над достижением официальной поддержки
🔵Определение поддерживаемых уровней и архитектур Android API
🔵Развитие непрерывной интеграции для проекта Swift
🔵Выявление и рекомендация методов взаимодействия Swift и Java SDK для Android
🔵Разработка поддержки для отладки приложений Swift на Android
🔵Консультирование и помощь в добавлении поддержки Android в пакеты Swift сообщества
Общение через Форум Swift для Android и в рабочей группе на форумах Swift. Членство в рабочей группе открыто для всех желающих.

Новость интригующая, хотя в моменте ничего и не даст:
🔴Сейчас речь идет о начале работы рабочей группы, а не о готовом решении
🟢Apple на своем примере смогут показать как использовать swift для разработки под Andoid, т.к. имеют достаточно своих приложений (например, Apple music)
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Android принудительно запрещает делать запросы в сеть в фоне вне жизненного цикла приложения

Теперь если вы делаете сетевой запрос при уходе приложения в фон, когда вы не используете WorkManager или Foreground Service, то такой запрос будет остановлен с исключением UnknownHostException (стандартно выбрасывается если нет сети или сервер невозможно найти) или другой IOException. ✔️ Ранее, пока был жив процесс приложения, можно было успеть выполнить запросы.

Я отмечу изменений как положительное для пользователей и общего состояния устройства. Google форсирует переход разработчиков API, предназначенные для определенных целей и слежением за выполняемой работой.

Изменение применяется на Android 15 и выше для всех приложений с targetSdk=35+

Источник тут

#android15
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Эти фичи изменят разработку на Kotlin (15 мин)

Прошла Kotlin Conf и в рамках keynote показали 3 фичи:
🏝 улучшение destructing declaration
🏝 обязательное использование возвращаемых значений для всех методов
🏝 улучшение работы с ошибками (не с exception, именно ошибками логики)

Версия на 📹 VK Video и 📺 RuTube

#AndroidBroadcast #kotlin #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Code Review примера от Google "Now in Android" (1.5 часа)

Делаю ревью кода проекта примера от Google - "Now in Android". Весь стек технологий от Google, Compose и адаптивная верстка UI

#AndroidBroadcast #codereview
Please open Telegram to view this post
VIEW IN TELEGRAM
🐱 Droidex - Android библиотека для определения уровня производительности устройства на основе характеристик и состояния: процессора, памяти, размера heap, скорости доступа в сеть, свободного хранилища, заряда батаерии и прочих настроек на устройстве.

DroidDex.getPerformanceLevelLd(PerformanceClass.CPU, PerformanceClass.MEMORY)
.observe(lifecycleOwner) { level: PerformanceLevel ->
when(level) {
EXCELLENT -> // Флагманский уровень
HIGH -> // Довольно сильное устройство, но не самое мощное
AVERAGE -> // Средняя производительность/возможности
LOW -> // Бюджетный телефон/низкая производительность
UNKNOWN -> // Не смогли понять ничего
}
}


Больше подробностей в статье или вот ссылка

#android #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Меняете работу приложения в зависимости от состояния/возможностей устройства?
Anonymous Poll
13%
Да
3%
Пробовали, но отказались
62%
Нет
13%
А так можно?
1%
Не занимаюсь разработкой
1%
Другой вариант
8%
Не участвую в опросе
Media is too big
VIEW IN TELEGRAM
📹 Как мы случайно ускорили релизную сборку в два раза. Роман Заремба, Юрий Анисимов из Т-Банк, Mobius 2025 Весна

Спикеры рассказали о том, как боролись за ускорение релизной сборки в мобильном банке и что из этого в итоге получилось. Разобрали особенности релизной сборки, связанные с подрезкой (shrinking) кода и ресурсов. Посмотрели, как профилировать и анализировать работу R8, а также отдельных Gradle-тасок, участвующих в подготовке релизной версии приложения.

Доклад для практикующих Андроид-инженеров с элементами хардкора.

🔗 Подробнее о конференции Mobius
🔗 Скачать презентацию

#android #mobius #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ Следите за правила для минификации кода R8 - такой вывод стоит сделать из доклада

Из-за того что одна команда добавила правило, это сильно затормозило весь этап работы R8 🤯 Причина - слишком сложный/объемный анализ кода на основе правила
# The proguard configuration file for the following section is
/builds/../feature-1.0.0/proguard.txt

-if class ru.tinkoff.feature.**.*$Companion {
kotlinx.serialization.KSerializer serializer(...);
}
-keep,includedescriptorclasses class ru.tinkoff.feature.**$$serializer { *; }

# End of content from /builds/../feature-1.0.0/proguard.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Strict-режим Android Resource Shrinker — аккуратнее, он без компромиссов

В Android можно включить resource shrinking, чтобы убрать из финального APK/Bundlа неиспользуемые ресурсы (строки, drawables, layouts и т.д.)
android {
buildTypes {
release {
shrinkResources true
minifyEnabled true
}
}
}


С недавних пор Google экспериментирует со strict режимом работы шринкера, который делает эту очистку более агрессивной, а именно:
👉 Удаляет все ресурсы, которые не удалось найти в коде или XML.
👉 Не делает допущений, что ресурс “вдруг используется где-то через reflection”. Нету явного использования или keep правила - удаление
👉 Режет всё под корень — даже если вы явно используете getIdentifier() или динамически загружаете ресурсы по имени, он может их не заметить и выкинуть.

📉 Эффект - меньший размер сборки, но есть риск крешей в рантайме, если ресурсы удалены, а были нужны

Как включается strict режим:
# В gradle.properties
android.experimental.enableStrictResourceShrinking=true


🛡 Как сохранить нужные ресурсы от удаления?

Если вы точно знаете, что ресурс используется, но shrinker может его не заметить:
1️⃣ProGuard правила (R8 учитывает их для ресурсов тоже):
# Правила для R8
-keepresources R.string.some_dynamic_string
-keepresources R.drawable.icon_loaded_by_name

2️⃣Файлы в папках res/raw/ и assets/ shrinker не трогает вообще.
3️⃣tools:keep и tools:discard в XML (подробнее тут):
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/landing,@drawable/logo"
tools:discard="@drawable/unused_image" />


Рекомендации:
👉 Не включайте strict-режим без хорошего UI-тест-покрытия.
👉 Проверьте, что не используете динамическое получение ресурсов getIdentifier() без крайней необходимости.
👉 Добавляйте -keepresources, если есть малейшие сомнения.

Подробнее про оптимизацию ресурсов читайте в официальной документации

#android #r8 #оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Must-read для разработчиков: книги, которые прокачают ваш код и мышление

Если вы хотите писать не просто рабочий, а чистый, масштабируемый и профессиональный код, сохраните себе эту подборку.

1️⃣ «Чистый код»
Для: Junior+/Middle, кто хочет избавиться от неидеального кода.
Фишка: учимся именовать переменные, рефакторить и работать с legacy так, чтобы коллеги не проклинали вас в чатиках.

2️⃣ «Идеальный программист»
Для: всех, кто хочет прокачать и код, и профессиональное мышление.
Фишка: про ответственность, дисциплину и почему «работает» ≠ «норм».

3️⃣ «Чистая архитектура»
Для: Middle+/Senior, кто проектирует системы.
Фишка: SOLID, Dependency Rule и как сделать архитектуру, которая не развалится через полгода.

4️⃣ «Head First. Архитектура ПО»
Для: тех, кто любит объяснения без скуки.
Фишка: интерактивный формат, картинки и «разжёвано» для новичков в теме.

🔥 По промокоду BROADCAST -25% на книги в издательстве Питер

Читали что-то из этого? Делитесь впечатлениями в комментариях!

#реклама
Очередное достижение на YouTube. За лет 5 лет ведение YouTube это не так много, но больше только впереди

#AndroidBroadcast
🚀 Вышел стабильный JavaScript движок от Google для Android

Новая стабильная библиотека Jetpack JavaScript Engine позволит разработчикам выполнять JS код в изолированной и ограниченной среде.

class MainActivity : ComponentActivity() {

// Теперь nullable, без lateinit
private var jsSandbox: JavaScriptSandbox? = null
private var jsIsolate: JavaScriptIsolate? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (!JavaScriptSandbox.isSupported()) {
Log.e("JS", "JavaScriptSandbox не поддерживается")
return
}

lifecycleScope.launch {
// Создаём и сохраняем в nullable-поле
jsSandbox = JavaScriptSandbox
.createConnectedInstanceAsync(applicationContext)
.await()
jsIsolate = jsSandbox?.createIsolate()

// При выполнении гарантируем, что jsIsolate != null
val result: String = jsIsolate
?.evaluateJavaScriptAsync(JS_SCRIPT_SCRING)
?.await()
?: "Ошибка: isolate не инициализирован"

Log.d("JS", "Результат выполнения: $result")
}
}

override fun onDestroy() {
super.onDestroy()
// Закрываем только если не null
jsIsolate?.close()
jsSandbox?.close()
}
}


#jetpack #js
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/03 09:00:08
Back to Top
HTML Embed Code: