15502
Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Другие наши проекты: https://tprg.ru/media
Android 17 прячет имена сайтов от оператора и требует разрешения на сканирование локальной сети
27 августа Google описала сетевые изменения Android 17, и два из них меняют поведение приложений.
Первое — Encrypted Client Hello. Даже под HTTPS имя домена уходит в TLS-рукопожатии открытым текстом, и оператор видит, куда вы ходите. ECH вместе с приватным DNS его закрывает; Android 17 стал первой крупной мобильной ОС с широкой поддержкой. Чтобы приложение это получило, Google рекомендует перейти на OkHttp 5.5.0 и включить ECH явно.
Второе — Local Network Protection. Раньше приложение могло без спроса просканировать домашнюю сеть и увидеть телевизор, камеры, консоль. С Android 17 на сканирование и подключение к устройствам локальной сети нужно разрешение пользователя. Для трансляции видео на телевизор рекомендуют системный выбор устройства: пользователь указывает телевизор сам, приложение доступа к остальной сети не получает.
Если у вас есть обнаружение устройств по mDNS или прямые подключения по IP в локалке, это ваш ближайший приоритет.
Приложение с открытым кодом выкинули из Google Play по жалобе без единого доказательства
Luanti — движок для воксельных игр с открытым кодом, до 2024 года он назывался Minetest. Игр и игровых ассетов в нём по умолчанию нет: пользователь ставит приложение, а игры докачивает из каталога ContentDB. 27 августа команда сообщила, что Android-приложение недоступно в Google Play.
Жалобу по DMCA подала от имени Microsoft компания Tracer․AI, платформа защиты бренда, ищущая нарушения ИИ-агентами. Всё обоснование — один номер регистрации US Reg. #TX 8-192-097, то есть Minecraft Java Edition 1.9. Какие ассеты и где, в уведомлении не сказано.
Похожее уведомление от той же компании приходило в марте 2023 года: встречное подали 25 марта, приложение вернули 10 мая — через 46 дней вместо 10–14 рабочих, которые отводит § 512 DMCA.
На картинке — все текстуры, которые входят в приложение, из разбора команды. Пока оно остаётся на F-Droid и на сайте проекта.
Google Play начнёт понижать приложения, которые едят слишком много памяти
С февраля 2027 года расход памяти становится обычной метрикой Android Vitals — со своим порогом «плохого поведения», как у крашей и ANR. Google объявила правила: считается Anonymous RSS плюс Swap и отдельно память под bitmap, порог сравнивается с суточным 90-м перцентилем, а качество Play оценивает по последним 28 дням.
Для обычного приложения на устройстве с 8 ГБ оперативной памяти потолок — 2,25 ГБ на переднем плане и 1,5 ГБ в фоне. Играм дают больше: 3,5 ГБ и 2,75 ГБ. Отдельно идёт DEX: если он больше 10 МБ у приложения или 50 МБ у игры, требуется не меньше 25% обфускации, оптимизации и shrinking — три отдельных порога. Кто не уложится, теряет видимость в Play и часть возможностей публикации.
Второе требование, с апреля 2027-го, — Zero-Tap Sign-In Restoration. Мобильное или планшетное приложение с авторизацией должно восстанавливать вход, когда пользователь при настройке нового телефона выбрал перенос данных: открылось — и уже залогинен. Делается через Restore Credentials API, доступный с Android 9; игры пока освобождены.
Смотреть у себя стоит уже сейчас: Android Vitals, размеры bitmap-кэшей и то, что реально осталось после R8.
Две функции Android-приложения месяц не работали в релизе, а в debug всё было в порядке
Автор LongShot (склейка длинных скриншотов) месяц получал жалобы: распознавание текста и скрытие персональных данных отвечали «Couldn't read this image». У него самого всё работало, Android Vitals молчал, крашей не было. Пять раундов «починил, проверьте» ушли впустую: он тестировал через installDebug, а debug-сборка не минифицируется.
Виноват R8. Consumer-правило ML Kit -keep class * implements ComponentRegistrar сохраняет класс, но не его члены. Пустой конструктор TextRegistrar в байткоде никто не вызывает, регистраторы создаются рефлексией, и R8 его удалил. Фикс одна строка: то же правило с { <init>(); }, покрывает семь регистраторов.
Главное изменение у автора: isMinifyEnabled = true в debug. Проверьте свой релиз: grep '<init>' по usage.txt и grep Registrar по seeds.txt, каждый регистратор должен быть там дважды. Разбор целиком.
Ваша память ещё работает или нейронки уже и помнят всё за вас?
Чтобы это проверить мы приготовили для вас «Меморину» — игру, которая поможет проверить вашу память.
Всё просто: нужно запомнить и выбрать одинаковые карточки. Если память плохая, то рано или поздно вы всё равно справитесь. А если хорошая, то сможете увидеть ваш потолок скорости.
Ну что, готовы проверить? Тогда переходите по ссылке: https://tprg.ru/fw4Z
Android 17 даёт приложениям функции, которые ИИ-агенты могут вызывать сами
Привыкли, что приложение ждёт, пока вы сами нажмёте кнопку? В Android 17 Google меняет правила: разработчик аннотирует функции приложения, и ИИ-агент может дергать их через Jetpack, получая доступ к локальному состоянию.
Приложение перестаёт быть островом и становится частью инфраструктуры для агентов. 16 июня вышел Android 17 с API 37, а 9 июня появился Android CLI 1.0. Теперь проект можно собирать из командной строки.
Вдобавок с 30 сентября разработчиков ждёт обязательная верификация в четырёх странах, а в Play сервисный сбор отделяется от платёжного. Разобрали дайджест июня — кто платит, кто мигрирует и что ломается.
Аутсорс, инхаус или выделенная команда — что реально дешевле?
Спойлер: ставка разработчика вам этого не скажет. Сравнивать модели по ставке довольно бессмысленное занятие, потому что за низкими ставками прячутся найм, налоги, онбординг, простои, переделки и часы техлида. В смете их не видно, а в бюджете — ещё как.
Разбираемся, как считать настоящий TCO (полную стоимость владения) по трём моделям:
🔘Инхаус — почему свой разработчик дороже оффера;
🔘Аутсорс — за что вы платите маржу подрядчику;
🔘Выделенные команды — почему «возьмём человека и ускоримся» работает не всегда.
Внутри — формулы для каждой модели и чек-лист из 3 пунктов, чтобы выбрать формат под свой проект.
⚡️ Android-приложение — это не только красивый экран. За ним стоят работа с внешним API, загрузка данных, разделение логики по слоям и архитектура, которую можно поддерживать без хаоса в коде.
📎 2 июля в 20:00 МСК приглашаем вас на открытый урок в преддверии старта курса «Android-разработчик. Базовый уровень». На занятии разберём путь данных в Android-приложении: от запроса к серверу до отображения информации на экране.
Посмотрим, как работать со сторонним API, реализовать выход в интернет для загрузки фотографии и описания, разделить приложение на слои по принципам чистой архитектуры и MVVM, а также прописать логику отображения данных.
➡️ Урок подойдёт тем, кто начинает карьеру в Android-разработке и хочет понять, как создаются приложения в реальной работе.
Зарегистрируйтесь и разберитесь, как связать сервер, архитектуру и экран в одном Android-приложении!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Появляется всё больше материалов с практическим опытом внедрения ИИ в крупных командах. Меня в таких историях всегда забавляет момент, когда эйфория от возможностей сталкивается с суровой реальностью процессов. Недавно посмотрел доклад Артура Василова про адаптацию ИИ в команде мобильного Яндекс Браузера — в нём звучит несколько идей, которые показывают настоящую картину.
Во-первых, нельзя просто взять и сказать: «всё, теперь мы работаем в 2 раза быстрее, вот LLM, вперёд» — это не серебряная пуля. Внедрять нужно постепенно и методично, выстроив среду и условия для перехода к AI-first разработке.
Во-вторых, как показала практика команды, реальное ускорение — 10–30%, а не в разы, как можно мечтать, потому что разработка лишь часть цикла производства. Ускорение разработки ≠ ускорение выхода фич на прод, и это важно чётко понимать.
Ещё одна мысль, которую я сам периодически повторяю окружающим: не пытайтесь применить ИИ везде и всюду. Берегите мозг, разгружайте себя от рутины, используйте там, где это уместно, но не прекращайте думать своей головой и отвечать за результат.
В докладе ещё много всего: как обеспечить окружение, какие метрики использовать для внедрения, как кучу Objective-C кода переводят на Swift, как подтягивают изменения из Chromium и мёрджат, что важно понимать бизнесу про AI-first. Такой набор тем даёт достаточно полную картину того, с чем сталкивается команда при внедрении, и оставляет пространство для собственных выводов и решений.
Локализация через Enum: избавляемся от рантайм-парсинга
В статье на Tproger разобрали три подхода к локализации: классическое наследование требует дублировать поля вручную, стандартные ARB/JSON парсятся в рантайме и съедают память, а табличные генераторы требуют ручного запуска после каждой строки.
Выход — Enum в одном файле без внешних ресурсов. Это убирает рантайм-парсинг и ручное дублирование. Если ваши сервисы сопрягаются с клиентами, где локализация до сих пор требует JSON или генераторов, стоит переложить её на compile-time решение.
Compose Multiplatform 1.11: iOS становится ближе к нативному ощущению
Кроссплатформенный UI часто ломается на мелочах: курсор в text field, selection handles, жесты, системное меню. В Compose Multiplatform 1.11 JetBrains как раз двигает эти детали на iOS, а не только добавляет ещё один общий API.
В релизе есть experimental native text input поверх UIView, concurrent rendering по умолчанию, обновлённые Compose UI test APIs v2 и переработанная обработка touch для web targets. Для мобильных команд это хороший набор сигналов: где shared UI уже зрелый, а где нужна проверка на устройстве.
Можно изучить релиз и выбрать, что тестировать в своём KMP-приложении. В деталях особенно полезны ограничения новых text input API и изменения в тестах.
@mobi_dev (теперь и в Max)
Android Skills — модульные AI-инструкции для разработки
Google выложила Android Skills — набор готовых markdown-инструкций для любой LLM (Claude, Gemini, GPT), которые проводят агента через рутинные архитектурные задачи в Android-проекте.
В наборе:
— View → Compose миграция с сохранением ViewModel-логики.
— Реализация adaptive-лейаутов под Android 17 (sw > 600 dp).
— Navigation 2 → Navigation 3 transformation.
— Миграция со старых camera-библиотек на CameraX.
Технически Skills — структурированные `.md` файлы с шагами, проверками и code patterns. LLM подключает их как контекст и идёт по чеклисту, не «вспоминая» Compose из памяти. Запуск — через новый Android CLI 1.0. Репо открытый, форкается под свой стек.
@mobi_dev (теперь и в Max)
7 июня Яндекс проводит Mobile Runtime (офлайн в Москве и онлайн)
В этот раз программа делится на два трека — AI и Not so AI. Эксперты расскажут про влияние нейросеток на пайплайн и архитектуру.
Что в программе:
• Проблема контекста в AI: Александр Иванов (Яндекс Go) на воркшопе покажет, как структурный индекс кода (ast-index) заменяет медленный grep и позволяет AI-агентам адекватно ориентироваться в гигантских монорепозиториях, не сливая токены впустую.
• Performance-инженерия: Лев Бондаренко (Яндекс Еда) разберет кейс медиаленты. Расскажет про управление памятью, дебаг и архитектурные решения, которые позволили сохранить плавность интерфейса при тяжелом контенте.
• Процессы и Seniority: на круглых столах лиды из Яндекса, Сбера, Райффайзенбанка и Одноклассников обсудят «обратную сторону AI» — почему сложность задач растёт вместе с внедрением агентов и как качать T-Shape скиллы, когда стек меняется слишком быстро.
Если вы работаете с нативной или кроссплатформенной разработкой, думаете про BDUI и перформанс — присоединяйтесь 7 июня.
Регистрация уже открыта.
Короткий тест, после которого станет понятно, куда вам идти стажироваться. Плюс ориентиры по зарплатам на старте и на мидл-уровне: https://tprg.ru/dzEP
@mobi_dev (теперь и в Max)
Хардкорный квест на стыке IT и космоса
Tproger и Яндекс запустили залипательную космическую бродилку для разработчиков. Никаких скучных опросников: вы просто путешествуете по планетам и решаете загадки.
На каждой остановке — вопрос на кругозор и смекалку. Например, придется логически вычислить, сколько команд в сутки могла принять первая орбитальная станция в 1971 году.
За прохождение всех планет — участие в розыгрыше телескопа и других призов, подробные условия на странице проекта. Полетели?
@mobi_dev (теперь и в Max)
Агент сам жмёт кнопки в вашем Compose-приложении и проверяет, что вышло
В Compose Multiplatform 1.12.0 внутри Compose Hot Reload появился экспериментальный MCP-сервер. Через него ИИ-агент запускает hot reload, снимает скриншот, читает semantic tree, кликает, вводит текст и смотрит логи. То есть агент проверяет собственную правку в живом окне, а не просто отдаёт Kotlin и надеется.
Из остального в релизе: для Web автоматически подгружаются подмножества шрифтов Noto, а на desktop новые WindowState и DialogState умеют выбирать экран, задавать минимальный и максимальный размер окна и ставить диалог относительно родителя. Плюс правки жестов на iOS, VoiceOver, interop с UIKit и совместимости с SDK из Xcode 16.
Семейная подписка в iOS-приложении без сервера и аккаунтов
Соло-разработчик сканера чеков ReceiptIQ добавил самую просимую фичу: одна подписка на семью и общие чеки. Сервера, аккаунтов и копий данных вне телефонов нет: устройства синхронизируются напрямую по Wi-Fi. Он расписал архитектуру и что сломалось по дороге.
Главный трюк: телефон родственника сам проверяет, что владелец платит. StoreKit 2 отдаёт транзакцию как JWS с подписью Apple (jwsRepresentation; jsonRepresentation подделывается), устройство проверяет цепочку сертификатов, подпись, bundle ID и environment == Production. Следствие: в TestFlight пейринг не потестировать, там Sandbox.
Слияние по last-writer-wins принесло классику: перештамповал modifiedAt при применении, и два телефона гоняли запись по кругу. Ещё один баг прожил два месяца: пир молча пропускал недоступные фото, синк не завершался, хотя данные доходили. Лечит таймаут тишины 30 секунд.
Есть синк между устройствами? Сверьте свои инварианты с его списком.
61% того, что KMP-модуль отдаёт в iOS, никто не вызывает
Если у вас Kotlin Multiplatform, ваш shared-модуль приезжает в Xcode как Objective-C-заголовок, и каждая лишняя строка в нём замедляет сборку и раздувает фреймворк. Разработчик приложения Framed открыл свой Shared.h и увидел 23 622 строки: в Kotlin всё public по умолчанию, поэтому в экспорт попали цвета темы, 38 констант отступов, внутренние колбэки экранов и типы Ktor. Компилятор выкинуть их не может: Objective-C диспетчеризует динамически, вдруг Swift позовёт.
Он написал Gradle-плагин kmprofiler: тот сопоставляет заголовок с Swift-кодом и считает экспорты без вызовов. Из 459 деклараций 282 не используются (61,4%).
Правка заняла пять файлов: internal для Dimens, Color, Type и UI-моделей, а для классов, нужных Android-модулям, есть @HiddenFromObjC. Заголовок ужался до 13 327 строк (−43,6%), фреймворк похудел на 5,7 МБ. Плагин лежит в Gradle Plugin Portal, автор показал, как прогнать через него свой модуль.
Встречайте новую мини-игру — «Отпуск».
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/DtBr
Почему ваш пет-проект ещё не бизнес, а вы — не предприниматель
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
Kotlin 2.4.0 стабилен: что меняется для Android- и iOS-приложений
Летом Kotlin исполняется 15 лет, но для мобильной разработки важнее релиз 2.4.0. В стабильной ветке появились context parameters и explicit backing fields — то, что упростит шаблонный код в Android-проектах. Kotlin/Native теперь поддерживает Swift packages, что упрощает связку с iOS-зависимостями в Kotlin Multiplatform.
Compose Multiplatform дошёл до 1.12.0-beta01, а Compose Hot Reload — до 1.2.0-beta01. Если собираете shared UI под Android и iOS, это сокращает цикл правка-сборка-проверка. Gradle 9.5.0 тоже на борту. Подробности в обзоре.
Бывают баги, которые видно только на живом железе, поэтому для надёжного тестирования мобильных приложений компании либо собирали парки из «живых» устройств в офисах, либо покупали сотрудникам минимально необходимый набор, не покрывая все кейсы.
Теперь делать это совсем не обязательно, потому что можно собрать себе набор устройств через мобильную ферму Selectel.
Мобильная ферма — это реальные устройства, которые находятся в надёжном дата центре, а выбрать себе нужные для тестов можно просто через админку. После завершения сеанса ваши настройки сохранятся для будущих тестов, а данные — надёжно защищены. В парке устройств самые разные модели: от топовых до старых и редких. Система поддерживает параллельное тестирование, а обслуживание устройств Selectel полностью берёт на себя.
Кстати, новые клиенты при регистрации до 31го июля получат 100 минут на тест.
Это #партнёрский пост
Взлом по подписке: ИИ-агенты против мобильных приложений
Экзотический фреймворк больше не спасает. Для взлома достаточно подписки на ИИ-агента. Стоимость атак упала, а скорость выросла.
2 июля, в 14:00 Николай Анисеня, руководитель разработки PT MAZE, разберет, как сделать взлом вашего приложения невыгодным для злоумышленника, и поговорит о том:
➡️ Что изменилось в реверс-инжиниринге сегодня и почему это важно;
➡️ Что агентский реверс умеет хорошо, а где пока буксует;
➡️ Как остановить связку «агент + человек», пока она не дошла до вашего прода.
И главное: в прямом эфире покажем, как агент атакует одно и то же приложение — без защиты и в броне PT MAZE.
Смотрите и делайте выводы.
📎 Регистрация
Это #партнёрский пост
⚡️Если вы разрабатываете мобильные игры и хотите зарабатывать больше без комиссий сторов — заходите в канал D2C!
Здесь пишут о том, как запустить собственный вебшоп и продавать игрокам напрямую: настройка, LiveOps, рост повторных покупок.
А ещё можно задать вопросы и получить ответы от тех, кто уже строит веб-монетизацию в геймдеве.
➡️Подписывайтесь
Реклама. ООО Е-Промо. ИНН 5260246781. Erid: 2W5zFHq9LYH
Это #партнёрский пост
Если вы устали от бесконечных тасок и созвонов, то мы приготовили для вас игру, которая поможет отдохнуть
А заодно проверить вашу способность быстро запоминать новую инфу. Переходите по ссылке и играйте в нашу «Меморину». И делитесь результатами в комментариях!
Играть тут: https://tprg.ru/Yldr
@mobi_dev (теперь и в Max)
Пять багов, которые видно только на живом железе
Подборка кейсов из практики мобильного QA — баги, которые проходят формальную проверку каждой итерации, но ломаются на стыке платформ:
— Android RatingBar наследует ProgressBar и считает рейтинг через округление по stepSize. На реальных Samsung округление уходило вверх: касание четвёртой звезды давало 5. Фикс — stepSize 0,01 и ручное округление в листенере.
— iPad слал в JSON OSName «iPadOS», бэкенд знал только «iOS» и возвращал 400 «Provider UUID not found». Все планшеты остались без пушей из-за одной строки.
— WebSocket чата не отправлял код 1000 при выходе, сокеты копились на каждом входе, приложение падало. Корень — переиспользованная библиотека основного банковского продукта.
— Чипсы специальностей и кнопка выбора счёта без скролла: на эмуляторе и тестовых данных всё ок, на восьми тегах и длинном списке UI ломался.
Внутри ещё промокоды и валидация на стыке веба и мобилки.
@mobi_dev (теперь и в Max)
@mobi_dev (теперь и в Max)
Android 17 убирает opt-out для адаптивности
На Google I/O 2026 анонсировали: Android 17 (API level 37) удаляет временный opt-out от ограничений на ориентацию и resizability. При target API 37 приложение обязано адаптироваться к экранам sw > 600 dp — планшетам, foldables и ChromeOS.
В Android 16 эти изменения уже ввели, но дали opt-out — можно было оставить app фиксированным под телефон. В Android 17 опции больше нет.
Что делать:
- Тестировать через флаг UNIVERSAL_RESIZABLE_BY_DEFAULT в App Compatibility Changes под SDK 36.
- Готовить UI на Compose 1.11 — Grid/FlexBox-лейауты и MediaQuery API.
Мотивация от Google Play — бейдж «Optimized for large screens» для приложений, прошедших новый quality bar.
Знаете, сколько строк кода было в программе полёта Apollo 11?
Подсказка: меньше, чем вы думаете. И всё это работало на компьютере с 4 КБ оперативной памяти.
Мы с Яндексом запустили космический спецпроект: интерактивная солнечная система с викториной про космос и историю разработки. Вопросы про реальные факты — первые баги, Apollo, Voyager и не только. Заодно можно познакомиться с SourceCraft — платформой Яндекса для разработчиков.
Пройдёте все планеты — участвуете в розыгрыше телескопа и других космических призов.
Отличный способ совместить полезное с интересным — особенно если вы только начинаете разбираться в том, как устроена разработка.
@mobi_dev (теперь и в Max)
Локальный ИИ на iPhone — без облака и без зависимости от API
Google выпустил AI Edge Gallery для iOS: приложение запускает Gemma 4 прямо на устройстве. Ответы на вопросы, распознавание фото, расшифровка голоса — всё работает локально, без интернета. Для разработчиков это референсная реализация on-device ML с открытым исходником на GitHub — можно разобрать, как интегрировать модель в своё приложение.
На iPhone запускаются облегчённые версии на 2 и 4 миллиарда параметров. Вместе с iOS-версией добавили Thinking Mode (chain-of-thought с видимыми шагами рассуждений) и Agent Skills — плагины-инструменты, которые модель вызывает сама. Tool use на телефоне — теперь не только в слайдах, а в коде на GitHub под Apache 2.0.
@mobi_dev (теперь и в Max)
Три ИТ-события, которые вы могли пропустить (а зря)
Пока все гонятся за хайповыми новостями, мы вместе с коллегой Андреем Дмитриевым из JUG.ru собрали события, которые уже повлияли на мир разработки.
В пилотном выпуске нового подкаста:
— Хакеры стерли десятки тысяч ПК через Microsoft Intune
— Дефицит оперативной памяти до 2030 года
— Оптимизация glibc под x86_64
О других событиях вы можете узнать, послушав подкаст.
Особое внимание предлагаем уделить рефлексии. В выпуске мы подсветили, почему те или иные истории важны для ИТ-сообщества. А теперь призываем вас в комменты под видео: что уже вошло в вашу жизнь из этих кейсов? И как думаете, что из этого не производит резонанса?
Смотрите подкаст и присоединяйтесь к дискуссии: https://tprg.ru/S7jD
@mobi_dev (теперь и в Max)