В hh.ru рассказали, как переезжали с Fragment-навигации на Compose + Modo в двух приложениях: 400+ экранов, 70 диплинков, 14 команд. Миграция идёт с 2022 года — и в июне 2026 ещё не завершена.
Modo выбрали за UDF-подход (состояние всей иерархии экранов — обычные данные, переходы — функция от состояния) и потому что разработчик Игорь Кареньков работает внутри hh.ru — можно дорабатывать без ожидания апстрима. Это же стало и первой граблей.
Ключевое решение для глобальных контейнеров: абстракция
NavScreen с двумя реализациями — Fragment и Modo Screen, роутер выбирает через feature toggle в рантайме. Это позволило раскатывать переезд через A/B и не стопорить продуктовую разработку. При первой раскатке словили краш в ComposeView, продуктовые метрики просели — остановили, починили, раскатили снова. Без feature toggle был бы хотфикс-релиз.Три реальные грабли:
👉 Слишком ранний выбор незрелой библиотеки — вложили много времени в доработки самой Modo
👉 Три параллельные миграции одновременно (View→Compose, Fragment→Modo, редизайн) — создали жёсткие зависимости и замедлили продуктовую разработку
👉 Старт без стратегии и метрик — месяцы хаоса, пока не завели дашборд с прогрессом
Если планируешь похожий переезд — там есть что взять.
#Android #Compose #Навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👎27👍13❤1👏1 1
Решил обновить compileSdk до Android 37, а там, оказывается, удалили старый Fingerprint API, который был до BiometricPrompt. Чем он им помешал? Ведь теперь обеспечивать поддержку старых версий Android сложнее, но это отдельный разговор.
В ходе миграции я узнал, что обновления библиотеки androidx.biometric — сущий хаос:
👉 Самая свежая версия — 1.4.0, и она только в альфе.
👉 Версия 1.3.0 вообще не делалась.
👉 Версия 1.2.0 не получила стабильного релиза, остановившись на альфе.
👉 Самая свежая стабильная версия — 1.1.0, которая вышла в 2021 году!
#Android #AndroidDev #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39 9👎4🎉3👏1
Google выпустила финальный Android 17. Исходники открылись в AOSP, обновление катится на поддерживаемые Pixel-устройства.
Главный сигнал релиза: Android официально Compose-first. Все новые API, библиотеки, инструменты и документация будут создаваться только для Jetpack Compose. View (
android.widget), Fragments, RecyclerView, ViewPager переходят в maintenance mode: только критические баги, никаких новых фич. Вопрос «когда View умрёт» закрыт — она уже в maintenance.Breaking changes при таргете SDK 37:
👉
resizeableActivity=false, screenOrientation, minAspectRatio / maxAspectRatio игнорируются системой на large screen (sw > 600 dp). Игры освобождены, остальные нет.👉
static final поля нельзя менять через reflection: IllegalAccessException. Через JNI — краш.👉 Native-библиотеки через
System.load() должны быть read-only, иначе UnsatisfiedLinkError.👉 Доступ к локальной сети заблокирован по умолчанию: нужен
ACCESS_LOCAL_NETWORK.👉 Lock-Free
MessageQueue быстрее, но ломает код с reflection на приватных полях.‼️ ВАЖНО CameraX: обновитесь до
1.5.2 или 1.6.0+ — краш на Android 17 из-за нового режима dynamic range.Из остального: Generational GC в ART, жёсткие лимиты памяти с принудительным завершением процессов, Post-Quantum Cryptography (ML-DSA), AppFunctions как on-device MCP API для AI-агентов (alpha, Gemini в private preview).
#Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👍7👎6❤3
Media is too big
VIEW IN TELEGRAM
Короткий разбор что нового в Android 17 от Google
0:00 Вступление
0:14 Intelligence System: AppFunctions
0:48 Adaptive-first: большие экраны
1:09 Производительность: память и ART
1:47 Приватность и безопасность
2:20 Камеры и медиа
2:41 Итоги
#Android17 #Android
0:00 Вступление
0:14 Intelligence System: AppFunctions
0:48 Adaptive-first: большие экраны
1:09 Производительность: память и ART
1:47 Приватность и безопасность
2:20 Камеры и медиа
2:41 Итоги
#Android17 #Android
👍20👎16
❤️ Mobile Runtime 2026, трек Not so AI: что тут есть для Android-разработчика
В этом году встреча разделилась на 2 трека, один из них — по хардкору без фокуса AI: нативка, кросс-платформа, архитектура, карьера. Чисто Android-докладов в нём почти нет, два про iOS и один про Flutter. Но некоторые вещи оттуда будут полезны любому мобильному разработчику.
Compose Multiplatform в Я.Team (Сергей Ефанов)
Кейс миграции без большого rewrite и без остановки продуктовой разработки — что вынесли в shared, как живёт share-router и недооцененная боль: Android-разработчик мержит зеленый PR, а iOS назавтра не собирается, хотя Xcode никто не открывал. Плюс конфликт value-type стейта в TCA с reference-типами из Kotlin. Много инфы для тех, кто думает про KMP-миграцию живого продукта.
Как делали медиаленту (Лев Бондаренко, Яндекс Еда)
Доклад про iOS, но боль универсальная: вложенные ленты внутри лент убивают перформанс на пагинации, лечится плоской структурой. В Compose с вложенными скроллами ровно та же история. По сети — минусы Proxyman и совет не плодить URLSession. И главное про метрики: оптимизировать только то, что влияет на продуктовые показатели.
Для Android-разработчика центр тяжести этого митапа оказался не в нативном треке, а в соседнем про AI.
#AndroidDev #ComposeMultiplatform #KMP
В этом году встреча разделилась на 2 трека, один из них — по хардкору без фокуса AI: нативка, кросс-платформа, архитектура, карьера. Чисто Android-докладов в нём почти нет, два про iOS и один про Flutter. Но некоторые вещи оттуда будут полезны любому мобильному разработчику.
Compose Multiplatform в Я.Team (Сергей Ефанов)
Кейс миграции без большого rewrite и без остановки продуктовой разработки — что вынесли в shared, как живёт share-router и недооцененная боль: Android-разработчик мержит зеленый PR, а iOS назавтра не собирается, хотя Xcode никто не открывал. Плюс конфликт value-type стейта в TCA с reference-типами из Kotlin. Много инфы для тех, кто думает про KMP-миграцию живого продукта.
Как делали медиаленту (Лев Бондаренко, Яндекс Еда)
Доклад про iOS, но боль универсальная: вложенные ленты внутри лент убивают перформанс на пагинации, лечится плоской структурой. В Compose с вложенными скроллами ровно та же история. По сети — минусы Proxyman и совет не плодить URLSession. И главное про метрики: оптимизировать только то, что влияет на продуктовые показатели.
Для Android-разработчика центр тяжести этого митапа оказался не в нативном треке, а в соседнем про AI.
#AndroidDev #ComposeMultiplatform #KMP
👎28❤10👍8🔥7
Forwarded from Unikit Inside
Unikit открывает поиск co-founders в направление Unikit Apps 🪫
За последние годы рынок арбитража трафика значительно вырос.
Вместе с этим вырос спрос на стабильную инфраструктуру, качественные приложения и команды, готовые играть «в долгую».
В рамках масштабирования экосистемы Unikit мы запускаем отдельное направление мобильной разработки.
Мы ищем не просто исполнителей, а стратегических партнеров для совместного развития юнита.
Наши ресурсы для вашего старта:
- Финансовая мотивация: до 80% от прибыли направления
- Клиентская база: готовая инфраструктура и существующий поток входящих запросов
- Технологии: работа через удобный формат MMP, доступ к продуктовой и технической экспертизе команды Unikit
- Синергия: экосистема, которая позволяет кратно ускорить масштабирование.
Если вы обладаете экспертизой в мобильной разработке и хотите построить масштабный продукт на базе готовой инфраструктуры, давайте обсудим детали.
Контакт для связи: @unikit_support
За последние годы рынок арбитража трафика значительно вырос.
Вместе с этим вырос спрос на стабильную инфраструктуру, качественные приложения и команды, готовые играть «в долгую».
В рамках масштабирования экосистемы Unikit мы запускаем отдельное направление мобильной разработки.
Мы ищем не просто исполнителей, а стратегических партнеров для совместного развития юнита.
Наши ресурсы для вашего старта:
- Финансовая мотивация: до 80% от прибыли направления
- Клиентская база: готовая инфраструктура и существующий поток входящих запросов
- Технологии: работа через удобный формат MMP, доступ к продуктовой и технической экспертизе команды Unikit
- Синергия: экосистема, которая позволяет кратно ускорить масштабирование.
Если вы обладаете экспертизой в мобильной разработке и хотите построить масштабный продукт на базе готовой инфраструктуры, давайте обсудим детали.
Контакт для связи: @unikit_support
Please open Telegram to view this post
VIEW IN TELEGRAM
👎35❤2🔥2
Media is too big
VIEW IN TELEGRAM
XREAL официально представил Aura (бывший Project Aura): лёгкие проводные очки с прозрачным дисплеем, вычисления вынесены в карманный блок на новом Snapdragon Reality Elite, Gemini в системе. Финальной цены нет, но база «не дороже $1500», резерв открыли за $99.
Google показал что на этом строить. Демка XR Geospatial Tour: надеваешь очки, поверх города висят 3D-подсказки, голосовой гид рассказывает про здания перед тобой. Внутри Geospatial API (VPS от Google в ARCore for Jetpack XR, субметровая точность и направление взгляда, точнее GPS), Gemini с Google Maps Grounding для маршрутов, Gemini TTS для озвучки и Compose for XR для 3D.
Если смотреть на рынок: смартфоны выезжены вдоль и поперёк, складные остались нишей, а лёгкие очки это правда новое место, где игра ещё не сыграна. Aura важна именно этим: форм-фактор наконец похож на то, что хочется носить, а не на шлем на полдня.
#Android #AndroidXR #XR #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
👎10👍8❤3
В марте Google анонсировал верификацию для всех, кто распространяет приложения (был пост). В июне появилась конкретика, и главное в ней не про сроки.
Верификация теперь не история одного Play. К ней подключились сразу 7 магазинов: Google Play, Samsung Galaxy Store, Xiaomi GetApps, OPPO App Market, vivo V-Appstore, Honor App Market и Transsion Palm Store (кто-то вообще знал про него?). Барьер на распространение APK поднимается по всей экосистеме, а не только внутри Google, но привязка к Google Play Services экосистеме все равно остаётся.
Для автоматизации завезли API.
Android Developer ID Status API проверяет, занят ли package name, Android Developer Console API регистрирует и ведёт пакеты прямо из CI/CD. Оба умеют OAuth delegation, так что регистрировать пакеты могут и сторонние платформы от твоего имени. ID Status API обещают глобально в июле, Console API сейчас в раннем доступе.🤫 По секрету - с июня на большинство Android-устройств автоматически приезжает системный сервис, который позже будет проверять регистрацию разработчика. Раскатка уже идёт.
Сроки прежние: обязательная регистрация с 30 сентября 2026 в Бразилии, Индонезии, Сингапуре и Таиланде, глобально в 2027. Незарегистрированное по-прежнему ставится через ADB или advanced flow.
Новость показывает реальный масштаб по всем магазинам и, как я понял, чтобы проходить верификацию необязательно публиковаться в Google Play, подойдет любой доверенный магазин.
#Android #GooglePlay
Please open Telegram to view this post
VIEW IN TELEGRAM
👎37❤5 5👍2
📃 Сравнение скорости работы Metro DI vs Dagger/Hilt в Android проекте.
У меня по рабочей задаче встал вопрос какой DI выбрать для трансформации Android проекта в KMP с поддержка Android, iOS, Desktop и конечно нормальной работой с Compose. Решил понять чего будет стоить миграции на Metro DI и был приятно удивлен.
За день с помощью AI перевел Now In Android на Metro и запустил различные тесты сравнения влияния DI на сборку проекта. Подробности в🪙 полной статье на Boosty
#Dagger #Metro #KMP #Performance
У меня по рабочей задаче встал вопрос какой DI выбрать для трансформации Android проекта в KMP с поддержка Android, iOS, Desktop и конечно нормальной работой с Compose. Решил понять чего будет стоить миграции на Metro DI и был приятно удивлен.
За день с помощью AI перевел Now In Android на Metro и запустил различные тесты сравнения влияния DI на сборку проекта. Подробности в
#Dagger #Metro #KMP #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
5👎31👍11❤4🔥2
Build-time бенчмарки реальных Android-проектов
Final Results
13%
Да, гонял(а) бы регулярно 🔄
25%
Запустил(а) бы разово, просто попробовать
36%
Сам(а) нет, но результаты смотрел(а) бы 📊
24%
Не интересует 🙅
14%
Просто прохожу мимо 👋
👎12👍7❤6
Hydra — это RASP-плагин для Android: подключаешь одной строкой в
build.gradle.kts, и на выходе assembleRelease APK несёт обфусцированное нативное ядро с защитой.plugins {
id("com.android.application")
id("com.github.iamjosephmj.hydra") version "1.9.0"
}Что проверяет на старте процесса: рут-доступ, Frida/hooking-инструменты, клонирование через virtual spaces (Parallel Space и похожие), эмуляторы, целостность APK. Нашёл критичное — завершает процесс. Без advisory-режима, сразу kill.
secrets {} в конфиге шифрует строки при сборке, в classes.dex попадает только цифертекст, расшифровка только на чистом устройстве:val url = withContext(Dispatchers.IO) { Hydra.secret("apiUrl") }Всё on-device, без сети, без телеметрии.
INTERNET permission не объявляется вообще.⚠️ Ядро
libdicore.so закрыто и обфусцировано — проверить что именно кладётся в APK нельзя. Для финтех-продакшна это принципиальный вопрос. Kill-by-default сломает эмуляторы в QA — тестировать только на реальных чистых устройствах. QUERY_ALL_PACKAGES потребует декларации в Play Console.В продакшн только после того, как понял, что именно ты кладёшь в свой APK.
#Android #AndroidDev #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎20👍17❤5 2
С 16 июня появятся предупреждения про превышение бесплатных лимитов на месяц, с 11 августа 2026 начнётся реальное ограничение бесплатных публикаций.
Пороги у 90 перцентиля: 1 167 файлов в месяц, 78 МБ суммарно, 7 релизов. Большинство open source разработчиков не заметят. Кто публикует много и часто — проверьте Usage Center уже сейчас.
Лично мне интересно, как это ляжет на KMP-проекты. Один multi-target релиз — это десятки файлов на каждую платформу: sources, javadoc, pom, подписи. Sonatype говорит, что работает с JetBrains над смягчением. Посмотрим.
🔗 Официальная документация о лимитах
#Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
👎14 7❤1
Final Results
45%
Да
16%
Спасибо что напомнил, запланируем
8%
31 августа садимся!
5%
Уже запланировано, сделаем в срок
16%
Нету приложения в Google Play - нет дедлайна
10%
Не участвую в опросе
👎14👍10
‼️ Каждый год 31 августа наступает дедлайн по повышению targetSdk. В этом году дедлайн потребует минимум 36 (Android 16), и это не просто цифра в Gradle-скриптах!
Чуть больше двух месяцев до дедлайна Google Play. С 1 сентября новые публикации и обновления должны таргетировать Android 16 (API 36). Пропустить срок — приложение пропадёт из выдачи для новых пользователей на устройствах с Android новее вашего текущего таргета.
Главная ловушка: переход на
👉
👉 Native .so и 16KB page size. Если в приложении или транзитивных зависимостях есть нативный код — нужна проверка совместимости. NDK 27+ и
👉
👉 Health permissions.
Тестировать breaking changes можно уже сейчас, не повышая
Или точечно по конкретному флагу — удобнее разбирать изменения по одному. Подробнее читайте в документации.
#Android #AndroidDev #Android16
Чуть больше двух месяцев до дедлайна Google Play. С 1 сентября новые публикации и обновления должны таргетировать Android 16 (API 36). Пропустить срок — приложение пропадёт из выдачи для новых пользователей на устройствах с Android новее вашего текущего таргета.
Главная ловушка: переход на
targetSdk = 36 включает breaking changes, которые начинают работать сразу после сборки. Что поменяется после смены цифры:👉
onBackPressed() больше не вызывается. На Android 16 его переопределение игнорируется. Нужен OnBackPressedDispatcher или OnBackInvokedCallback.👉 Native .so и 16KB page size. Если в приложении или транзитивных зависимостях есть нативный код — нужна проверка совместимости. NDK 27+ и
useLegacyPackaging = false. Без этого возможны краши на части устройств.👉
USE_FULL_SCREEN_INTENT требует явного разрешения. Звонки, будильники, доставка — всё, что показывает уведомления поверх экрана блокировки, перестанет работать без декларации в манифесте.👉 Health permissions.
BODY_SENSORS и BODY_SENSORS_BACKGROUND заменяются на гранулярные android.permission.health.* — READ_HEART_RATE, READ_OXYGEN_SATURATION и т.д.Тестировать breaking changes можно уже сейчас, не повышая
targetSdk, через compat framework:adb shell am compat enable-all com.yourapp
Или точечно по конкретному флагу — удобнее разбирать изменения по одному. Подробнее читайте в документации.
#Android #AndroidDev #Android16
👍56❤6👎5
Стандартный Android Profiler показывает потоки. Не корутины. Kotlinx-coroutines-debug работает в unit-тестах, но не на реальном девайсе с живым UI. Яндекс Go сделали для этого отдельный инструмент.
Coroutine Tracer — плагин в их открытой библиотеке Demeter. Gradle-плагин на этапе сборки находит все launch/async через ASM и вставляет хук без единой правки в исходниках. В рантайме хук перехватывает возвращённый Job, регистрирует invokeOnCompletion и всё отображается как интерактивное дерево прямо на девайсе.Два технических момента, которые зацепили:
👉 Перехватывают
launch$default, а не только launch. Это та версия, которую компилятор Kotlin генерирует для вызовов с default-параметрами. Именно она выполняется в большинстве реальных вызовов.👉 Parent-child связи строятся через обратный индекс
Job → traceId. Без него launch-в-цикле даёт квадратичный оверхед на горячем пути. Дерево собирается итеративно — страховка от StackOverflowError на глубоких иерархиях.Zero overhead по умолчанию: без
includedClasses в конфиге плагин ничего не инструментирует.Отсутствие нормального рантайм-инструментария для корутин давно раздражало. Это первый инструмент из тех, что видел, который работает на живом девайсе без ручной расстановки меток.
🔗 Статья на Хабре
#Kotlin #Coroutines #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍38👎8❤3
С 30 июня в США, EEA и UK заработает новая модель. Вместо единого процента: service fee (берётся всегда) и billing fee (+5% только при оплате через Google Play Billing).
Ставки ещё зависят от того, "новый" или "старый" пользователь — поставил приложение до или после даты запуска новой модели в его регионе.
👉 Подписки (recurring): 10% service fee для всех. Через Play Billing итого 15%, через альтернативный биллинг — 10%.
👉 Первый $1M/год: 10% service fee на любые транзакции, включая existing installs.
👉 Разовые покупки, new installs, стандарт: 20% + 5% billing = 25%.
👉 Разовые покупки, existing installs, стандарт: 25% + 5% billing = 30%. Те же цифры, что были до.
Для existing installs есть один выход: если переводишь пользователя на свой сайт (external web link), billing fee нет — получается 20% вместо 30%.
По сути Google разгрузил будущий трафик, а существующую базу оставил на старых ставках. Снижение на разовые покупки по-настоящему заработает только по мере переустановки — растянется на годы.
Для команд с оборотом до $1M всё ровно лучше: 10% service fee вне зависимости от типа транзакции и статуса инсталла.
🔗 Источник - Android Dev блог
#Android #GooglePlay #Монетизация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👎5
Когда: вторник, 30 июня, 19:00 GMT+3
В прямом эфир буду обсуждать с разработчиком из компании, которая перешла на Kotlin Multiplatform, а теперь отказались и возвращаются назад! С другой стороны - я который переводит разработку банка на Compose Multiplatform.
Эфир пройдет на 🪙 Boosty, запись будет опубликована позже там же
#Kotlin #KMP #CMP #Compose #AndroidBroadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍57👎15
💯У нас было 300+ смартфонов и 100 бесплатных минут на тестирование
И у вас будет, если начнете пользоваться Мобильной фермой Selectel.
Это решение для удаленного тестирования мобильных приложений на реальных устройствах, а не на эмуляторах. Здесь доступно 300+ устройств на Android и iOS, чтобы проверять удобство интерфейсов, проводить автотесты и параллельное тестирование.
Новые клиенты получат 100 бесплатных минут для теста сервиса. Регистрируйтесь и получите промокод: https://slc.tl/z7m0e
Реклама. АО "Селектел". erid:2W5zFHsyvxy
И у вас будет, если начнете пользоваться Мобильной фермой Selectel.
Это решение для удаленного тестирования мобильных приложений на реальных устройствах, а не на эмуляторах. Здесь доступно 300+ устройств на Android и iOS, чтобы проверять удобство интерфейсов, проводить автотесты и параллельное тестирование.
Новые клиенты получат 100 бесплатных минут для теста сервиса. Регистрируйтесь и получите промокод: https://slc.tl/z7m0e
Реклама. АО "Селектел". erid:2W5zFHsyvxy
👎8👏4❤1
Подключаешь аналитику, рекламный или нативный SDK и приложение сразу получает разрешение
INTERNET. Android тут всё или ничего: один permission, весь процесс. Куда ходит каждая библиотека внутри отследить из коробки нельзя.Poseidon даёт allowlist в манифесте:
<poseidon mode="monitor">
<!-- или enforce, если хочешь блокировать -->
<allow host="api.mybackend.com"/>
<allow host="*.cdn.example.com"/>
</poseidon>
Работает на трёх уровнях: JVM HTTP-клиенты (OkHttp, Volley, HttpURLConnection), нативный C/C++, Go и raw-syscall через seccomp. В Logcat видишь решение по каждому запросу каждой библиотеки отдельно.
monitor — самый полезный режим для начала: просто смотришь, куда ходят все твои SDK, ничего не блокируешь.#Android #Security #SDK
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46👎4
Команда Android в Банки.ру полторы недели дебажила Seamless-авторизацию (вход по номеру через
HTTP Header Enrichment): на iOS всё стабильно, на Android соединения рвались случайным образом. Логи врали, таймаут без причины, снифать мобильный трафик оператора нельзя, а сам оператор банил номер за десятки попыток авторизации подряд.Причина не в бэкенде и не в DNS. Когда открывается
Custom Tab для SSO, Activity приложения уходит в onPause() → onStop(). По документации Chrome, браузер должен поднимать process importance приложения через bound KeepAliveService, и процесс не попадает под сетевые ограничения. Но проприетарные слои энергосбережения Samsung и Xiaomi этот механизм игнорируют и убивают процесс по таймеру, не глядя на bound services. У Huawei логика другая — он смотрит на реальный сетевой трафик и не трогает активный процесс, поэтому там всё работало стабильно.Фикс —
ForegroundService с типом shortService:override fun onCreate() {
super.onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startForeground(
NOTIFICATION_ID,
createNotification(),
ServiceInfo.FOREGROUND_SERVICE_TYPE_SHORT_SERVICE,
)
} else {
startForeground(NOTIFICATION_ID, createNotification())
}
}`shortService
доступен с Android 14 (лимит ~3 минуты, для 10–15 секунд поллинга с запасом), на более старых версиях работает как обычный ForegroundService. Процесс получает importance PERCEPTIBLE_APP_ADJ, и даже Samsung не трогает foreground service на One UI 6+.
‼️ ВАЖНО: сервис стартует и работает, даже если пользователь запретил приложению уведомления — POST_NOTIFICATIONS` для запуска foreground service не требуется, просто плашка не появится в шторке.Хороший повод лишний раз не доверять только официальной доке по process lifecycle и тестировать не на одном Pixel, а хотя бы на паре вендоров с разной агрессией энергосбережения.
🔗 Полная статья — там же разбор всех отвергнутых гипотез (DNS, оператор, регион) и код привязки к жизненному циклу SSO.
#Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍45👎3❤1👏1