Forwarded from StartAndroid
Что происходит с подписочной моделью в приложениях
#android #subscription
https://habr.com/ru/articles/1015000
Рынок подписочных приложений быстро меняется. Старые приложения по-прежнему доминируют по доле выручки, но новые каждый день наводняют cторы. ИИ-приложения «умирают» быстрее, чем успевают выходить, а зона безопасной выручки для среднего приложения стремительно исчезает. «Выживания» больше нет: либо процветаешь, либо выгораешь.
Каждый год наш отчёт «Состояние подписочных приложений» ставит целью понять, что меняется в индустрии - что ушло в прошлое и что нас ждёт. В этом году наш набор данных снова вырос и составил более 115 000 приложений с более 16 миллиардов долларов выручки. Мы проанализировали данные по всем 115 тысячам из них.
#android #subscription
https://habr.com/ru/articles/1015000
Хабр
Что происходит с подписочной моделью в приложениях: уроки, тренды и ориентиры на 2026 год
Перевод статьи Лорелея Уитмен, RevenueCat Ключевые выводы из крупнейшего в мире набора данных о подписочных приложениях Краткое содержание Рынок подписочных приложений быстро меняется. Старые...
Forwarded from Mobile Native ️️
Как я пытался чинить анимацию в Jetpack Compose LazyColumn
Интересная статья от разработчика из ТБанка про то, как они решали проблему рассинхронизации анимаций айтемов в
В статье разбирается, почему возникает рассинхрон, как устроен механизм анимаций внутри
Читать (Ru)
Интересная статья от разработчика из ТБанка про то, как они решали проблему рассинхронизации анимаций айтемов в
LazyColumn – когда один из айтемов меняет свои размеры, анимация второго айтема происходит с временным лагом.В статье разбирается, почему возникает рассинхрон, как устроен механизм анимаций внутри
LazyColumn, почему кастомный animateItem обречен с самого начала и к какому решению в итоге пришли.Читать (Ru)
Forwarded from StartAndroid
Разбираем Remote Compose: как Google предлагает строить BDUI
#android #compose #remote
https://habr.com/ru/companies/alfa/articles/1018986/
Remote Compose выглядит очень перспективной технологией. Фреймворк активно развивается и поддерживается командой Google. Однако на момент написания статьи технология всё ещё находится в alpha-версии, поэтому использовать её на проде пока рано.
Но я изучил этот фреймворк и хочу поделиться своим опытом, а когда Remote Compose выйдет в бета-версию вы будете знать, как с ним работать
В статье разберём:
- общую концепцию Remote Compose,
- чем он отличается от классического BDUI,
- какие интересные технические решения используются внутри,
- несколько практических примеров использования.
#android #compose #remote
https://habr.com/ru/companies/alfa/articles/1018986/
Хабр
Разбираем Remote Compose: как Google предлагает строить BDUI
Технологии Backend-Driven UI уже давно используются во многих компаниях, включая Альфа-Банк. Существует множество реализаций этого подхода, и недавно Google представил собственное решение — Remote...
Forwarded from Android Good Reads
Используем
Собственно говоря, весь код на превьюшке. Будет бодро слать вам ошибку компиляции, пока вы не добавите
Android Good Reads
@RequireOptIn чтоб пометить Composable для использования только в превьюСобственно говоря, весь код на превьюшке. Будет бодро слать вам ошибку компиляции, пока вы не добавите
@Suppress или не уберете помеченную функциюAndroid Good Reads
Forwarded from Mobile Compose
#Release #Compose #Changelog
😇 Релиз Compose библиотек (25.03.2026)
🔵 Animation 1.10.6/1.11.0-beta02
🔵 Foundation 1.10.6/1.11.0-beta02
🔵 Material 1.10.6/1.11.0-beta02
🔵 Runtime 1.10.6/1.11.0-beta02
🔵 UI 1.10.6/1.11.0-beta02
▫️ Remote 1.0.0-alpha07
▫ Material 3 1.5.0-alpha16
▫️ Wear Compose 1.6.0
▫ Navigation3 1.1.0-rc01
▫ XR Compose 1.0.0-alpha12
▫ XR Material3 Compose 1.0.0-alpha16
🎨 Список всех изменений
🎨 Mobile Compose 💬 Чат канала
♾
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Multiplatform Broadcast
Пять новых extension-функций для
Iterable, Array и Sequence: isSorted(), isSortedDescending(), isSortedWith(comparator), isSortedBy(selector), isSortedByDescending(selector). Все возвращают true если элементы уже стоят в нужном порядке. При первой же неправильной паре вернет false, поэтому на больших коллекциях работает эффективно.val numbers = listOf(1, 2, 3, 4)
numbers.isSorted() // true
val users = listOf(
User("Alice", 24),
User("Bob", 31),
User("Charlie", 29),
)
users.isSortedBy(User::age) // false
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
AGSL (Android Graphics Shading Language) появился в Android 13 как нативный язык шейдеров для GPU. Работает через RuntimeShader и RenderEffect, позволяет делать попиксельные эффекты на любом View или Composable. Но писать его больно: код живёт в строках, uniform-ы привязываются вручную, IDE не помогает.
Библиотека RedByteFX оборачивает это в Kotlin DSL. Вот волновое смещение — сначала голый AGSL, потом то же самое через библиотеку:
// Голый AGSL — строка в коде
uniform shader content;
uniform float wave_amplitude;
uniform float wave_frequency;
half4 main(float2 fragCoord) {
float2 offset = float2(
0.0,
sin(fragCoord.x * wave_frequency) * wave_amplitude
);
return content.eval(fragCoord + offset);
}
// RedByteFX DSL
val effect = redbytefx {
val amplitude = uniformFloat(0f, "wave_amplitude")
val frequency = uniformFloat(0.08f, "wave_frequency")
val offset = let(
float2(0f, sin(fragCoord.x * frequency) * amplitude),
"wave_offset"
)
sample(fragCoord + offset)
}
🔗 habr.com
#Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from StartAndroid
Статья рассказывает, как превращать любые колбэк‑ориентированные Android‑API (включая Google Play Billing, локации, Bluetooth и т.п.) в suspend‑функции с помощью suspendCoroutine
#kotlin #coroutines
https://www.revenuecat.com/blog/engineering/kotlin-coroutine-bridge/
#kotlin #coroutines
https://www.revenuecat.com/blog/engineering/kotlin-coroutine-bridge/
RevenueCat
Kotlin Coroutine bridges: converting any callback-based Android API to suspend functions | RevenueCat
This article explores the suspendCoroutine bridge pattern, showing how to convert callback APIs into clean suspend functions, handle diverse callback shapes, design proper error propagation, and how SDKs like RevenueCat apply it at scale.
Forwarded from Android Good Reads
Kotlin 2.4.0 Sorted-Order валидация
Добавили новых
🔗 Ссылка на документацию
Ну и сразу пример:
Android Good Reads
Добавили новых
extension функций в стандартную библиотеку для валидации того как отсортированы коллекции: .isSorted()
.isSortedDescending()
.isSortedWith(comparator)
.isSortedBy(selector)
.isSortedByDescending(selector)
🔗 Ссылка на документацию
Ну и сразу пример:
data class User(val name: String, val age: Int)
fun main() {
val users = listOf(
User("Alice", 24),
User("Bob", 31),
User("Charlie", 29),
)
println(users.isSortedBy(User::age))
// false
}
Android Good Reads
Forwarded from Kotlin Multiplatform Broadcast
Koin неплохой DI, но jncencdbt compile time вадлидации не позволял его спокойно использовать в любом большом проекте как тот же Dagger 2. Пропустил зависимость — узнаешь в продакшене. Плагин меняет это фундаментально: если проект собрался, граф валиден. Никакого
checkModules() в тестах, никакого verify() как костыля.Технически плагин работает на уровне FIR + IR, то есть раньше KSP в пайплайне компилятора. Нет генерируемых файлов, нет отдельного тулчейна. DSL и аннотации работают вместе через один плагин.
Три уровня валидации:
👉 каждый модуль отдельно — проверяются определения и их видимость
👉 полный граф при
startKoin<T>() — A3-валидация👉 call-sites — когда feature-модуль вызывает
koinViewModel<T>(), плагин генерирует подсказки, которые app-модуль проверяет при своей сборке⚠️ Сейчас это RC-стадия: Koin 4.2.0-RC1, плагин 0.3.0, требует Kotlin 2.3.20-Beta1. На прод пока не стоит, но попробовать на уже можно так как влияния на продакшен код нету!
Моя библиотека Koin Detekt Rules теперь просто станет не нужна, хотя лучшие практики и форсирование подходов никто не отменял.
🔗 Анонс в блоге
#Koin #Android #DependencyInjection
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Идея простая: вместо того чтобы объяснять агенту контекст каждый раз руками, ты даёшь ему готовый SKILL.md — файл со структурированными инструкциями, шагами и справочными материалами по конкретной задаче. Агент читает его как спецификацию и работает точнее.
Это следует открытому стандарту agentskills.io, то есть формат не завязан на один инструмент — подходит для Claude Code, Cursor и любого другого агента, который умеет читать файлы из контекста.
Что уже есть в репозитории:
👉 Миграция с XML-вёрстки на Jetpack Compose
👉 Установка и миграция на Navigation 3 (deep links, multiple backstacks)
👉 Анализ R8-правил и оптимизация размера APK
👉 Обновление до последней версии Play Billing Library
Как использовать: скачиваешь нужный SKILL.md из репозитория, добавляешь в контекст агента (в Claude Code — через команду /add-file или как часть промпта), говоришь что нужно сделать. Агент уже знает, как это делается по правилам Google.
Набор пока небольшой, но сама идея правильная: вместо того чтобы учить агента с нуля на каждом проекте, ты даёшь ему готовую базу знаний от самой команды Android.
#AndroidDev #AIDev #ClaudeCode
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Good Reads
Android: Offline-first system design
Таких статей мы читали и слушали уже миллион. На картинке вы видите конечный результат проектирования, но эта статья неплохо показывает то, как прийти к такому решению последовательно. Такого типа задачки это часть этапа собеседований (system design)
🔗 Freedium link
Внутри: путь от "Апка крашится без доступа к интеренету" к Offline-first
Android Good Reads
Таких статей мы читали и слушали уже миллион. На картинке вы видите конечный результат проектирования, но эта статья неплохо показывает то, как прийти к такому решению последовательно. Такого типа задачки это часть этапа собеседований (system design)
🔗 Freedium link
Внутри: путь от "Апка крашится без доступа к интеренету" к Offline-first
Android Good Reads
Forwarded from Android Broadcast
Главное изменение — доступ к контактам. Приложениям, которым не нужен широкий доступ к контактам, теперь обязательно использовать Android Contact Picker. Никакого READ_CONTACTS без реальной необходимости, которую теперь придется доказываться. Тот самый пикер, который появился в Android 17, сразу стал требованием политики — не опцией.
Я писал об этом ещё когда Contact Picker появились в превью Android 17. Google никогда не оставляет такие инструменты просто опцией — новые системные механизмы приватности рано или поздно становятся политикой магахина.
С геолокацией та же история. Location Button из Android 17 — новый системный UI-элемент для разового доступа к точной позиции — уже прописан в политике как рекомендованный минимум для precise location. Фича ещё в бете, требование уже действует.
🔗 Подробности обновления политик Google Play
#GooglePlay #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Mobile Developer
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
https://android-developers.googleblog.com/2026/04/build-android-apps-3x-faster-using-any-agent.html
Google выкатили набор инструментов для тех, кто разрабатывает Android через агентов - Gemini CLI, Claude Code, Codex или что-то своё.
Обсуждаем тут -> @famous_md_bot (Tier 3)
⸻
TG | Max | YouTube | VkVideo
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM