Что из перечисленного обязательно должно быть свойством чистой функции в функциональном программировании?
Anonymous Quiz
3%
Она может изменять глобальные переменные
92%
Она всегда возвращает один и тот же результат при одних и тех же входных данных
1%
Она может записывать данные в файл
4%
Она может вызывать другие функции с side эффектами
🔥17❤2
🏗 Функциональное программирование в Android. Знакомство с парадигмой (21м)
Первая статья из серии про как построить архитектуру Android приложения в функциональном стиле. Стек: Kotln; Jetpack Compose; одна из UDF-архитектур (Redux, TEA, MVI); ArrowKt; Coroutines + Flow.
В начале рассматривают функциональную парадигму и отличия ее от других подходов (императивный и декларативный)
#android #архитектура
Первая статья из серии про как построить архитектуру Android приложения в функциональном стиле. Стек: Kotln; Jetpack Compose; одна из UDF-архитектур (Redux, TEA, MVI); ArrowKt; Coroutines + Flow.
В начале рассматривают функциональную парадигму и отличия ее от других подходов (императивный и декларативный)
#android #архитектура
🔥23❤2🤔2🤯1
Forwarded from Kotlin Multiplatform Broadcast
Что нового в релизе языка:
👉 Превью context parametr
👉 Non-local break и continue теперь stable
👉 Kotlin/JVM: изменения в генерации метода по умолчанию
👉 Kotlin/Native: улучшения в управлением памятью
👉 Kotlin/Wasm: wasmJs таргет отделили от js таргета
👉 Base64 стало Stable
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤40👍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Поддерживается Android 7.0, а на Android 13 и выше используются AGSL шейдеры, что повышает производительность и добавляет блюр.
Автор библиотеки - подписчик канал и буде рад звезде на GitHub и вашему мнению по коду решения в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76🔥41🤯25❤3
🤯 AI ломает R8 и восстаналивает код после защиты
Разработчик провёл эксперимент по восстановлению обфусцированного когда с помощью GPT 4o ичуда не произошло. AI смог сделать читаемые имена переменных и функций, сделать форматирование кода. С Compose кодом вообще ничего дельного не вышло. Теперь надо думать и про угрозу AI взломов усложнит жизнь IT.
Запрос на восстановление кода
🔗 Альтернативная ссылка на статью
#android #r8 #ai
Разработчик провёл эксперимент по восстановлению обфусцированного когда с помощью GPT 4o и
Запрос на восстановление кода
Using the R8 algorithm, deobfuscate this class and translate it into its real-world context.
🔗 Альтернативная ссылка на статью
#android #r8 #ai
🤔35🤯16👍2❤1
Разработчик решил реализовать простую затею - обрезать видео на основе выбранного отрезка текста из расшифровки дорожки. Использовал Jetpack Media3 и EventLabs API. ПО итогу вышло приложение
🔗 Альтернативная ссылка тут
#android #androidjetpack #media3 #opensource #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥12❤1🤯1
Forwarded from iOS Broadcast (Андрей Зонов)
Внутри сообщества официально собирается рабочая группа по созданию Android приложений на Swift. Основная цель - добавить и поддерживать Android как официальную платформу для Swift
Задачи рабочей группы:
Общение через Форум Swift для Android и в рабочей группе на форумах Swift. Членство в рабочей группе открыто для всех желающих.
Новость интригующая, хотя в моменте ничего и не даст:
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤔43🤯32❤6🔥4🙏1
Теперь если вы делаете сетевой запрос при уходе приложения в фон, когда вы не используете WorkManager или Foreground Service, то такой запрос будет остановлен с исключением UnknownHostException (стандартно выбрасывается если нет сети или сервер невозможно найти) или другой IOException.
Я отмечу изменений как положительное для пользователей и общего состояния устройства. Google форсирует переход разработчиков API, предназначенные для определенных целей и слежением за выполняемой работой.
Изменение применяется на Android 15 и выше для всех приложений с targetSdk=35+
Источник тут
#android15
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯47👍23❤8
Media is too big
VIEW IN TELEGRAM
Прошла Kotlin Conf и в рамках keynote показали 3 фичи:
Версия на
#AndroidBroadcast #kotlin #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍14❤5🤯1
Media is too big
VIEW IN TELEGRAM
Делаю ревью кода проекта примера от Google - "Now in Android". Весь стек технологий от Google, Compose и адаптивная верстка UI
#AndroidBroadcast #codereview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍12❤3
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
👍45❤4
Меняете работу приложения в зависимости от состояния/возможностей устройства?
Anonymous Poll
13%
Да
3%
Пробовали, но отказались
62%
Нет
12%
А так можно?
1%
Не занимаюсь разработкой
1%
Другой вариант
8%
Не участвую в опросе
👍8
Media is too big
VIEW IN TELEGRAM
Спикеры рассказали о том, как боролись за ускорение релизной сборки в мобильном банке и что из этого в итоге получилось. Разобрали особенности релизной сборки, связанные с подрезкой (shrinking) кода и ресурсов. Посмотрели, как профилировать и анализировать работу R8, а также отдельных Gradle-тасок, участвующих в подготовке релизной версии приложения.
Доклад для практикующих Андроид-инженеров с элементами хардкора.
🔗 Подробнее о конференции Mobius
🔗 Скачать презентацию
#android #mobius #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍11
Из-за того что одна команда добавила правило, это сильно затормозило весь этап работы 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
👍22
В 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 может его не заметить:
# Правила для R8
-keepresources R.string.some_dynamic_string
-keepresources R.drawable.icon_loaded_by_name
res/raw/ и assets/ shrinker не трогает вообще.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
👍45❤4🔥4
📚 Must-read для разработчиков: книги, которые прокачают ваш код и мышление
Если вы хотите писать не просто рабочий, а чистый, масштабируемый и профессиональный код, сохраните себе эту подборку.
1️⃣ «Чистый код»
Для: Junior+/Middle, кто хочет избавиться от неидеального кода.
Фишка: учимся именовать переменные, рефакторить и работать с legacy так, чтобы коллеги не проклинали вас в чатиках.
2️⃣ «Идеальный программист»
Для: всех, кто хочет прокачать и код, и профессиональное мышление.
Фишка: про ответственность, дисциплину и почему «работает» ≠ «норм».
3️⃣ «Чистая архитектура»
Для: Middle+/Senior, кто проектирует системы.
Фишка: SOLID, Dependency Rule и как сделать архитектуру, которая не развалится через полгода.
4️⃣ «Head First. Архитектура ПО»
Для: тех, кто любит объяснения без скуки.
Фишка: интерактивный формат, картинки и «разжёвано» для новичков в теме.
🔥 По промокоду
Читали что-то из этого? Делитесь впечатлениями в комментариях!
#реклама
Если вы хотите писать не просто рабочий, а чистый, масштабируемый и профессиональный код, сохраните себе эту подборку.
1️⃣ «Чистый код»
Для: Junior+/Middle, кто хочет избавиться от неидеального кода.
Фишка: учимся именовать переменные, рефакторить и работать с legacy так, чтобы коллеги не проклинали вас в чатиках.
2️⃣ «Идеальный программист»
Для: всех, кто хочет прокачать и код, и профессиональное мышление.
Фишка: про ответственность, дисциплину и почему «работает» ≠ «норм».
3️⃣ «Чистая архитектура»
Для: Middle+/Senior, кто проектирует системы.
Фишка: SOLID, Dependency Rule и как сделать архитектуру, которая не развалится через полгода.
4️⃣ «Head First. Архитектура ПО»
Для: тех, кто любит объяснения без скуки.
Фишка: интерактивный формат, картинки и «разжёвано» для новичков в теме.
🔥 По промокоду
BROADCAST -25% на книги в издательстве ПитерЧитали что-то из этого? Делитесь впечатлениями в комментариях!
#реклама
🔥38🤯9👍5🤔3❤1
Очередное достижение на YouTube. За лет 5 лет ведение YouTube это не так много, но больше только впереди
#AndroidBroadcast
#AndroidBroadcast
36🏆100👍53❤10🎉8🔥5
Новая стабильная библиотека 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
🤯32👍17🔥2❤1
Используете библиотеку Jetpack App Search?
Anonymous Poll
88%
Не знаю про такую
1%
Да
7%
Знаю, но не использую
0%
Пробовали, но отказались
0%
Не пишу под Android
0%
Другой вариант (пиши в комментах)
4%
Не участвую в опросе
❤8👍2
@mobile_reviews_bot - Telegram бот для отслеживания отзывов на приложение в Google Play и App Store. Отвечать можно прямо из бота + есть ИИ для генерации ответов. Есть бесплатный тариф
Подробности на сайте
#googleplay #appstore
Подробности на сайте
#googleplay #appstore
🔥23👍3🤯2❤1