Обновить
256K+

Android *

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

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

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

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

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

Читать далее

Новости

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Больше букав

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

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

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

В новом выпуске применение для .fixedSize и (не)слежка в приложениях Яндекс для Android, погружение в One‑Time Events в Android и регрессионное UI-тестирование для iOS, Shipaton 2026 от JetBrains, offline‑first PWA, сканер для слабых смартфонов, идеальный телефон для цифрового детокса и многое другое. Заходите!

Читать далее

Я печатаю медленнее, чем думаю: локальная диктовка на Whisper для Windows, телефона и Telegram

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

Я диктую постоянно: сообщения, заметки, постановку задач — говорить в разы быстрее, чем печатать, а мысль не успевает остыть. Проблема в том, что удобной диктовки, которая не гонит звук в чужое облако, я не нашёл. Так появился PasteTalk: локальная диктовка для Windows по горячей клавише, а вокруг неё — собственный сервер, приложение для телефона и Telegram-бот.

Отдельным требованием стала мама: из-за слабого зрения печатать на телефоне она почти не может, и телефонная часть проектировалась под самый жёсткий случай — одна кнопка на весь экран, крупный шрифт, ошибки словами. Забегая вперёд: правки «для мамы» сделали приложение удобнее и для всех остальных.

Под катом — архитектура, цифры и четыре бага, каждый из которых молча съедал наговорённый текст.

Как это устроено →

Я искал идеальный телефон для цифрового детокса. Кажется, я его нашёл

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

Вообще идея перейти на кнопочный телефон пришла со времён, когда я нашёл сообщество dumbphones. Суть этого движения не в глупых телефонах, а в управлении вниманием. Ведь много лет назад телефон служил средством связи, средством решения проблем. Но в наше время самая большая задача смартфона — это развлечения и сжигание времени впустую. И вот это сообщество людей, уставших от рабства алгоритмов и синих экранов, переходит со смартфонов на старые звонилки / MP3-плееры / полноценные камеры и записные книжки.

Но я к такому не готов. Я уже почти год ходил с Nokia N95, и это тяжело. Юзер экспириенс давно шагнул вперёд, и старые телефоны остались позади. А также, как ни крути, приложения в современном мире очень важны. Ведь даже такая банальщина, как карты и погода, старому телефону будет недоступна.

И вот, кажется, я нашёл золотую середину! Это кнопочный телефон на Android. Его экран слишком мал для залипания, при этом железо достаточно современное, он не тормозит, тянет карты и мессенджеры, держит зарядку несколько дней и стоит буквально 6к рублей — разве можно просить о большем?

Об этом телефоне далее в статье.

Как я починил энергосбережение OnePlus 3T на mainline ядре

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

Первая часть закончилась тем, что телефон заработал, и какое-то время этим всё и ограничивалось. postmarketOS на mainline-ядре, сверху Docker, Tailscale и один небольшой сервис, которому от меня ничего не требовалось. Я убрал телефон на полку и перестал о нём думать — ровно этого я от него и хотел.

Сервис работал. Заодно выяснилось, что процессор всё это время держался на 70 °C. Не под нагрузкой, а в покое, днём и ночью, на устройстве без вентилятора и без радиатора, где тепло уходит только через собственный алюминиевый корпус.

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

Читать далее

Погружение в One‑Time Events в Android

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

Представьте, перед вами задача – после авторизации пользователя навигировать его на главный экран, или показать snackbar, например, об ошибке.

В Android для таких событий есть специальное название – One-Time Events, или же просто Effects – события, которые мы отправляем UI из ViewModel и хотим, чтобы они обработались ровно один раз.
И они отличаются от состояния экрана! Состояние существует всегда, а effect отправляется и обрабатывается единожды; в состоянии существуют данные, с которыми user взаимодействует, или которые повторно могут отображаться на экране, когда как effect — совершенно противоположное.

Моделировать такой паттерн можно несколькими способами: через состояние, SharedFlow или Channel. В этой статье мы разберем на простом примере каждый подход и обсудим минусы и плюсы, а также обсудим лучшее обходное решение!

Читать далее

Тренажер ТРИЗ для инженеров

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

Я давно работаю инженером и когда узнал про ТРИЗ очень заинтересовался. Изучив все приемы пришел к выводу - а ведь не надо даже в наше время уже сидеть и долго мыслить над проблемами разработки ведь все основные шаблоны уже описаны. А ведь каждый шаблон это фактически выход из определенной ситуации и проблемы. В начале я сделал приложение в котором с начало показывается название приема и скрыто его значение. По типу приложения для заучивания слов. Но это мне показалось не очень интересным и скучным, поэтому долго я им не прозанимался и вскоре забыл про него.

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

И вот через несколько дней появилось мое приложение. Ну а теперь подробней о нем.

Читать далее

Как за вами следит Яндекс: часть 1/3

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

Полный реверс-инжиниринг APK Яндекса: разбираем механизмы сбора аудио, геолокации, платежных данных и списков установленного ПО

Читать далее
1
23 ...