Обновить
256K+

Android *

Пишем под самую популярную мобильную ОС

158,06
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Делегирование работы облачным агентам

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.3K

DoorDash построили внутреннюю платформу для облачных AI-агентов под названием Flux. Масштаб уже впечатляющий: за один месяц 2026 года через неё прогнали 130 000 инженерных задач, включая свыше 25 000 автоматических код-ревью в неделю и более 10 000 запусков playbook'ов из более чем 300 уникальных сценариев — всё это работает без участия человека, параллельно и круглосуточно.

Почему ушли от локальных агентов на ноутбуках

Команда описывает три конкретных ограничения агентных воркфлоу, запущенных прямо на машинах инженеров:

Читать далее

Я сделал CRM без бэкенда. Вот чего мне это стоило

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели7.3K

Приложение слушает разговоры продавца с клиентами и превращает их в текст. Человек на той стороне трубки не подписывался на то, чтобы его голос уехал на чей-то сервер, и это решило архитектуру раньше, чем я написал первую строчку: наружу не уходит ничего.

Дальше идёт счёт, который за это пришёл, и он вполне конкретный: шесть с половиной минут работы на десятиминутный разговор и половина возможностей, которые в приложении с сервером есть по умолчанию.

Читать далее

Шпаргалка: Kotlin Coroutines Channels и Actor‑модель

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.9K

Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня поговорим про Каналы (Channel) и паттерн Actor.

В предыдущих частях мы выяснили, что обычные suspend-функции возвращают результат только один раз. Но что делать, если у нас есть непрерывный поток данных, который асинхронно генерируется в одной корутине, а обрабатываться должен в другой (или даже в нескольких)? Нам нужна потокобезопасная «труба». В мире корутин этой трубой является Channel.

Читать далее

Почему баннер Yandex Ads мигает в LazyColumn — и при чём здесь AndroidView.onReset

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели8.3K

Представьте обычный feed на LazyColumn: новости, карточки, между ними рекламный баннер. Баннер загрузился, пользователь пролистал его вниз, затем вернулся обратно, и мерцание реклама грузится заново.

Ещё раз вниз. Ещё раз вверх. Ещё одно мерцание и загрузка.

На первый взгляд причина кажется очевидной: item покидает экран, rememberBannerAdState теряет состояние, Compose создаёт всё заново. Значит, достаточно сохранить BannerAdState за пределами item и проблема исчезнет.

Я тоже так подумал.

Не исчезла.
Мерцания остались.

С этого момента простой баг (?) интеграции Yandex Ads превратился для меня в небольшое расследование: пришлось разобраться, что на самом деле происходит с item внутри LazyColumn, как SubcomposeLayout переиспользует composition, почему это ещё не означает переиспользование AndroidView и какой lifecycle поверх всего этого построил Compose API Yandex Ads.

В итоге вопрос «почему баннер моргает?» оказался гораздо интереснее самого workaround.

Читать далее

Приложение для быстрого запоминания текста на английском

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели13K

В школе на уроках английского учительница показала нам способ как быстрее запомнить пересказ текста. Она сначала просила нас переводить текст, а затем смотря в перевод вспоминать текст на английском. Мне этот способ очень понравился, но не понравилось мне то что нужно было постоянно открывать книжку или тетрадку с английским текстом, если еще не успел запомнить некоторые слова переводе.

И вот я не давно опять вернулся к пересказам. Но теперь уже не в школе и с тетрадкой, а в метро и с телефоном. Пользоваться гуглом транслейтом оказалось не так уж и удобно и я подумал а почему бы самому не сделать специализированное приложение с подстветкой нужной строки, с текстом на русском и английском и самое главное синхронной прокруткой двух окон на разных языках. Так и родился приложение «Удобный пересказ».

Читать далее

Мобильная разработка за неделю #644 (17 — 23 августа)

Время на прочтение4 мин
Охват и читатели10K

В новом выпуске 136 уровней вложенности XCUITest и Android Runtime под капотом, как Tinder сократил холодные старты на 47% и новые условия распространения приложений в Евросоюзе, от Event-Driven UI к State-Driven UI, что нового в Dart, как сделать MCP удобными и действительно полезными, уменьшение трения в приложениях и многое другое. Заходите!

Читать далее

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.8K

Привет, Хабр! Меня зовут Женя, я занимаюсь развитием цифровых продуктов в Sminex. В статье поделюсь опытом разработки и запуска Sminex Event — собственного продукта для управления корпоративами.

Читать далее

История создания звонилки без номера: месяц, миллионы токенов и грабли, которые легли в основу этого цикла статей

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.3K

В октябре прошлого года на Хабре вышла статья «Как я писал свою звонилку для видеозвонков» — автор под ником CEOCTO за несколько вечеров написал P2P-видеозвонилку на WebRTC, потому что его достали обрывающиеся созвоны в мессенджерах. Я прочитал, улыбнулся, полез смотреть исходники на GitHub — и на этом всё. Как обычно бывает с чужими pet-проектами: оценил, закрыл вкладку, забыл

Читать далее

DragonDoll для Google Chrome: обновите ваш шпион до последней версии

Уровень сложностиПростой
Время на прочтение20 мин
Охват и читатели10K

Весной 2026 года специалисты направления Threat Intelligence экспертного центра безопасности Positive Technologies обнаружили необычную атаку на пользователей Саудовской Аравии с использованием неизвестного ранее APK-файл с именем Chrome.apk. Образец заинтересовал: за милой картинкой обновления Google Chrome и неожиданным требованием для работы «специальных возможностей» мы обнаружили тщательно защищенную от анализа цепочку запуска Android-шпиона.

Читать далее

Паничный PIN, который отдавал ключ от всего: разбор ошибок

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели9.2K

Мы делаем мессенджер RCQ (rcq.app, исходники клиентов на github.com/rcq-messenger). В нём есть штука, которую в разных приложениях называют по-разному: паничный PIN, duress PIN, подставной код. Смысл один. У вас просят разблокировать телефон, вы вводите второй PIN, и человек напротив видит приложение, в котором ничего интересного нет.

В августе мы сели проверять какие у нас остались проблемы с этой фичей. Проверка началась как формальность перед внешним аудитом: пройти по коду, сверить с тем, что написано в модели угроз, поправить формулировки. Закончилась она тем, что на Android подставной PIN оказался не границей, а ключом от всей переписки.

Читать далее

v1.10: роли, личности и снова этот WardLink…

Уровень сложностиПростой
Время на прочтение1 мин
Охват и читатели10K

Не буду повторятся и заново объяснять что такое ONYX, в этой статье я уже все подробно описал. Это обзор нового обновления.

Читать далее

Мобильная разработка за неделю #643 (10 — 16 августа)

Время на прочтение4 мин
Охват и читатели9.5K

В этом дайджесте Android-приложение Polymarket на Swift, Structured Concurrency и отмена корутин, что нового во Flutter 3.47 и разработка мобильного приложения с помощью Claude Code, конкурирующие магазины приложений в Play Store, ИИ, парализовавший принятие решений и многое другое. Заходите!

Читать далее

# DI без рефлексии и бойлерплейта: магия KSP в действии

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.5K

Погряз в боли настройки DI в многомодульных проектах и решил написать собственный велосипед на Kotlin Symbol Processing. Рассказываю, как поэкспериментировал с генерацией кода, победил R8/ProGuard, добавил compile-time валидацию графа и что из этого вообще получилось

Читать далее

Ближайшие события

Как я добавил в Braille eMotion установку APK: доступный диспетчер приложений и автономный EXE

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели16K

Я незрячий и пользуюсь двумя Braille eMotion 40. На одном устройстве мне стало тесно в рамках штатного набора программ, поэтому я сделал доступный диспетчер APK и автономный установщик для Windows. Рассказываю, почему для интеграции понадобился отдельный пакет-мост, как я проверял опасные операции и какую часть работы взял на себя GPT Codex.

Читать далее

Как я дал старому планшету глаза и получил панель для Home Assistant

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели70K

Давно хотелось поставить где-то на видном месте планшет-панель для Home Assistant — сценарии, термостат, камеры, всё в одном месте, без необходимости каждый раз доставать телефон. Готовые панели стоят как отдельный гаджет, а мысль «взять б/у планшет и допилить под себя» выглядела куда веселее.

На Авито нашлось объявление на два старых планшета за копейки — продавец явно расчищал полку. План был простой: вытащить аккумулятор (устройство и так будет висеть на постоянном питании, живой батарее там нечего делать — только распухнет через пару лет) и запитать напрямую от сети.

Вот что в итоге получилось — а дальше расскажу, как до этого дошёл.

Читать далее

Как мы перенесли ответственность за поддержку мапперов моделей на KSP

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели11K

Каждый разработчик, работавший с проектом, где одни модели мапятся в другие, знает эту боль: добавил поле в модель и пошёл обновлять десятки мапперов вручную. Переименовал параметр - компилятор взрывается ошибками, и ты снова правишь код руками. Мапперы - это “мёртвая зона”: они пишутся механически, но при этом легко ломаются и не приносят никакой ценности бизнесу. В статье я расскажу о том, как мы от этого ушли и какие результаты получили

Читать далее

Обработка исключений в Kotlin Coroutines

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.9K

Представьте классическую ситуацию: вы запускаете корутину для фоновой задачи (например, сетевого запроса) и хотите подстраховаться от падений. Как бы мы сделали в синхронном коде — обернули бы в стандартный блок try/catch блок кода, в котором может быть ошибка:

Читать далее

Анатомия VDD: Как я нашел RCE в форке Telegram, а Google Security не увидел «ничего вредоносного»

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели88K

TL;DR Внутри альтернативного клиента ExteraGram работает внутренняя система динамического обновления компонентов. Через неё авторы могут в любой момент загрузить на ваш телефон код прямо из Telegram-канала, обойти окно установки (can_not_skip) и выполнить его в едином адресном пространстве приложения (с его UID и полными правами). В исследованной цепочке загрузки я не обнаружил проверки цифровой подписи. При компрометации канала или инфраструктуры обновлений это создаёт возможность массовой доставки вредоносного кода пользователям.

Как всё началось Был обычный вечер, делать было откровенно нечего. Я сам сидел на ExteraGram, и вдруг стало интересно - а как оно вообще внутри устроено? (Спойлер: после того, что я там увидел, я его снес).

Читать далее

Пет-проекты джунов (Android)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.4K

Так получилось, что сейчас мы ищем в команду младшего Android-разработчика. Я много общаюсь с ребятами, которые только начинают свой путь в Android, и внимательно изучаю их GitHub — особенно те репозитории, которые они указывают в резюме.

И, если честно, картина выглядит немного печально. Приходишь на GitHub к кандидату, а там в лучшем случае лежат недоделанные наброски или абсолютно одинаковые, шаблонные проекты с популярных курсов. Сами по себе курсы — это плюс, на мой взгляд, но приложение с курсов выглядит у всех одинаково, и дальше названия я, как правило, не ухожу.

Поэтому у меня появилось желание помочь начинающим разработчикам. В этой статье я собрал идеи для пет-проектов, которые лично я бы оценил =), а также подобрал актуальные инструменты и бесплатные API для их реализации.

Читать далее

Шпаргалка: Structured Concurrency и отмена корутин

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели8.8K

Тема 1. Как выглядит Kotlin Coroutine без макияжа

Тема 2. Kotlin suspend функции

Тема 3. Kotlin Coroutine диспетчеры и потоки: где выполняются корутины?

Что будет, если запустить тяжелую фоновую обработку данных, а пользователь закроет экран? Если мы не контролируем этот процесс, потоки продолжат работу, сжигая батарею, процессорное время и создавая утечки памяти.

Для решения этой проблемы в Kotlin применяется концепция Structured Concurrency.

Больше букав