Обновить

Мобильная разработка

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

Динамические product flavors в Android: когда статической конфигурации уже мало

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

Рано или поздно каждый Android‑разработчик сталкивается с задачей «одно приложение — много сборок»: white‑label‑решения, региональные версии, отдельные сборки для разных магазинов приложений, демо для клиентов, внутренние окружения.

Встроенный механизм product flavors в Android Gradle Plugin отлично справляется со своей задачей — пока количество вариантов умещается в голове и в паре экранов build.gradle.kts.

В этой статье я разберу подход, при котором конфигурация flavors строится динамически: список вариантов и их параметры живут вне build.gradle.kts.

Читать далее

Как использовать Rust внутри приложений на .NET MAUI

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

Когда производительность начинает иметь значение

По производительности Rust находится в той же лиге, что и C++, но с заметно более дружелюбной моделью безопасности. Возможно, вы уже слышали о командах, которые постепенно переходят на Rust, заменяя существующий код. А если вам уже приходилось бороться с лагами от GC или пытаться сделать плавную анимацию, отсутствие сборщика мусора начинает выглядеть особенно заманчиво.

Но можно ли сделать так, чтобы использовать Rust внутри приложения .NET для Android, iOS, MacCatalyst и Windows было действительно удобно?

Читать далее

Как мы ускоряем работу во Flutter в VSCode: расширения и горячие клавиши

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

Привет, Хабр! На связи Анна, лидер Flutter-команды Friflex, и Роза, Flutter-разработчица Friflex. Эта статья о том, как мы убираем лишнюю рутину в VSCode. Расскажем про полезные расширения и поделимся списком шорткатов, которые помогают быстрее искать, править и перемещаться по коду.

Читать далее

Android, iOS и немного Python: подходит ли Kivy для реальных кроссплатформенных задач?

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

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

Первым делом на ум, конечно же, пришло программирование. Создать небольшое приложение «для себя» можно не погружаясь в тонкости работы языков и фреймворков, а для старта – это именно то, что нужно. 

В своей работе я часто использую Python, однако код, который я на нем пишу, предназначен для автоматизации задач по обработке данных, запускается в терминале и не предусматривает прямое взаимодействие с пользователем через интерфейс. Полноценному приложению необходим понятный интерфейс, а для его создания нужны дополнительные инструменты. 

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

 Давайте вместе разберемся — что же такое Kivy?

Читать далее

Как 2ГИС адаптируется к проблемам с позиционированием

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

Нестабильное позиционирование — не только пользовательская проблема, но и для нас как разработчиков картографического сервиса. Когда спутники теряются или данные становятся неточными, рушится целая цепочка: от отображения местоположения на карте до построения маршрута и поведения навигатора.

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

Читать далее

Бот Лифтер. Как мы оцифровали работу мобильной бригады подъема через мессенджер вместо отдельного приложения

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

Привет, я Максим Королев из Петрович-Теха, цифрового партнера сети строительных магазинов «Петрович». Компания специализируется на продаже стройматериалов, комплектации крупных объектов и комплексном обслуживании, включая доставку и подъем на этаж. В первой статье рассказывал, как мы сделали семейство Telegram-ботов для ITSM, во второй — как вынесли бизнес-логику «Дежурного» в CORE и подключили MAX.

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

Читать далее

Мобильная разработка за неделю #629 (20 — 26 апреля)

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

В новом дайджесте уход Тима Кука и ненависть к Gboard, диск выбора месяца в стиле Airbnb и анимация зачеркивания текста в SwiftUI, основы разработки приложений для iOS, приватность в обычной клавиатуре, Kotlin-агент широкого профиля KMP, атаки мобильных приложений глазами хакера, рост релизов в App Store и Google Play и многое другое. Заходите!

Читать далее

Сломал руку, купил Pixel 10, возненавидел Gboard и написал свой офлайн-голосовой ввод для Android на GigaAM v3

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

Написал полностью офлайновый голосовой ввод на русском для Android. Никаких серверов, подписок и привязок к аккаунтам. За распознавание отвечает открытая нейросеть GigaAM v3 от Сбера: модель зашита прямо в APK, работает без интернета и отлично расставляет знаки препинания.

Главная фишка — не нужно отказываться от любимой клавиатуры со свайпом. Это не замена Gboard, а просто плавающая кнопка, которая появляется поверх любого поля ввода. Работает элементарно: тапнул — говоришь. Как только делаешь естественную паузу в речи, готовый текст тут же влетает в активное окно. Напрямую, минуя буфер обмена.

Стек: GigaAM v3 + sherpa-onnx (NNAPI / CPU) + крошечный детектор речи Silero VAD. Требования: Android 13+, ARM64. Исходники открыты (MIT).

Читать далее

LxBox: VPN клиент и split-routing в Android

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

Привет. Полгода назад я выложил singbox-launcher — десктопный GUI для управления ядром sing-box. По фидбеку стало понятно: идея зашла, людям удобно собирать и отлаживать конфиги на ноутбуке, а потом переносить их на роутеры и другие сетевые устройства. Подробнее о десктопной версии я писал на Хабре.

Пару слов для тех, кто не в контексте. Есть небольшой класс кроссплатформенных сетевых ядер, которые умеют гибкую маршрутизацию трафика и поддерживают современный набор протоколов: WireGuard, VLESS, SOCKS5, Shadowsocks, Hysteria2, TUIC и так далее. Sing-box в этом списке — не самый раскрученный, но для меня он оказался наиболее интересным: быстрая эволюция, внимание к деталям, чистый код, живое общение мейнтейнеров с пользователями, классно организованный по логике конфиг.

Довольно быстро стали приходить запросы на Android-порт. Первое время казалось, что это будет прямое переиспользование десктопного кода. На практике сценарии потребления на мобильных оказались сильно другими: другой UX, другой lifecycle, Doze и background-лимиты, OEM-специфика, ограниченный экран, другие ожидания от автозапуска и обновлений. В итоге пришлось переписать практически всё с нуля.

Результат этой работы — LxBox, и сегодня я хочу рассказать, чем он отличается от существующих Android-клиентов и как устроен изнутри.

Читать далее

Мессенджер на Paginator. Боевые задачи

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

В прошлой статье я сравнивал Paginator с Paging 3 на кошачьем уровне: «вот простой фид, смотрите — три строки вместо тридцати». Это полезно для первого знакомства, но не отвечает на главный вопрос: а как оно себя поведёт, когда продукт начнёт требовать то, ради чего люди обычно и пишут свой велосипед поверх Paging 3?

В этой статье я беру мессенджер — потому что мессенджер это честный полигон. Там есть:

Читать далее

Публикация приложений в российском App Store бессмысленна? Как ограничения Apple ID влияют на разработчиков

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

Не прошло и четыре года, российские аккаунты Apple Developer для разработчиков потеряли свою актуальность. С 1 апреля по поручению Минцифры российские операторы связи отключили возможность пополнения баланса Apple ID с помощью мобильного счета — ограничения внедрили МТС и Билайн, которые оставались своеобразным спасательным кругом как для компаний, так и для физиков — свои сервисы в App Store я до сих пор оплачивал только с помощью специально заведённой для этого симки Билайн (МТС я на дух переношу, и ни за что не стал бы пользоваться им даже если бы не было другого выхода вообще).

Apple официально подтвердила, что обработка платежей в App Store и других сервисах компании в России остановлена. Оставшиеся доступные варианты оплаты — подарочные или иностранные карты — требуют смены региона (как итог, не все нужные приложения становятся доступны для скачивания). Поэтому, можно сказать, что российские аккаунты Apple умерли — для использования доступны теперь только бесплатные приложения и сервисы.

Особенно больно от того, как это повлияло на авторов мобильных приложений и игр — разработчиков с российским аккаунтом Apple Developer. Если в 2022 году Apple отключила монетизацию контента в РФ (в 2023 году правила смягчились. Компания разрешила получать оплату на аккаунты, зарегистрированные в России, но только при условии, что платежи будут совершать исключительно российские пользователи — т.е. работать на зарубежную аудиторию с локальным аккаунтом всё равно оставалось невозможно), то теперь проблем подкинула родина. И теперь, когда даже российские пользователи не могут пополнить баланс Apple ID и оплатить сервис, приложение или игру, работа через российский Apple Developer вообще теряет всякий смысл — только если вы не продвигаете внутри какой-нибудь бесплатный сервис. 

Читать далее

Распознавание лиц с потока камеры в .NET MAUI

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

Сегодняшние приложения для мобильных и настольных устройств умеют распознавать на изображениях почти что угодно, - от QR-кодов до количества калорий в еде на на фото. На платформах, которые поддерживает .NET MAUI, для этого можно использовать разные варианты, как локальные ML-движки вроде TensorFlow Lite, нативные SDK для конкретной платформы, типа ARKit на iOS, так и разные Vision API. Далее все зависит уже от реализации в приложении.

И вот, когда речь идет пойдет о распознавании изображений от камеры, наш вариант - пакет DrawnUi.Maui.Camera. В предыдущей статье я показывал, как использовать SkiaCamera для анализа аудио с AI в реальном времени, а сегодня займемся видео: разберем на примере распознавания лиц.

Читать далее

AI в iOS-разработке: что у меня реально закрепилось в 2026, а что я выкинул

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


За последний год я перепробовал всё: Cursor, Claude Code, Codex, локальные Qwen-модели для ревью, пять версий своего CLAUDE.md, Xcode MCP от Apple, mobile-mcp, Conductor для параллельных агентов. Что-то осталось в проде, что-то выкинул через неделю. А какие-то вещи, которые казались обязательными год назад, сегодня выглядят как антипаттерны.

Это статья не про «AI изменит всё» и не про то, как за вечер собрать Todo-приложение через Claude Code. Это про то, как iOS-разработчику, который уже живёт с AI-инструментами, выжать из них максимум - и не наступить на грабли, на которые наступили до тебя остальные.

Читать далее

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

Ленты коротких видео: как оптимизировать, чтобы вас смотрели больше

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

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

Привет, меня зовут Рамиль Габдрахманов, я руковожу разработкой видеоплееров в Yandex Infrastructure. Нашу видеоплатформу используют многие сервисы Яндекса: Кинопоиск, Яндекс Маркет, Яндекс Музыка и другие — а компании вне Яндекса могут использовать её через Yandex Cloud Video. В день наш плеер воспроизводит 103 847 867 931 секунду видео.

Сегодня расскажу о том, как устроены ленты коротких видео у нас, что под капотом и какие оптимизации мы применяем.

Читать далее

Как мы считаем досрочное погашение кредита: что реально работает в коде

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

Когда я начал делать кредитный трекер, казалось, что финансовая математика — самая простая часть проекта. Формула аннуитета есть в любом учебнике, Excel справляется за пять минут.

Я ошибался.

Небольшой контекст: до этого я довольно долго не делал ничего для Android — работал в других областях, экосистема успела заметно измениться. Вернуться оказалось неожиданно приятно: Compose после нескольких лет XML-вёрстки ощущается как глоток свежего воздуха, KSP вместо KAPT работает заметно быстрее, а Room с Flow и корутинами — это уже совсем другой уровень удобства по сравнению с тем, что я помнил. Так что статья отчасти и про это: как выглядит возвращение в Android-разработку после перерыва.

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

Читать далее

Paging 3 хорош. Пока вам не понадобится что-то ещё

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

Если коротко: пагинация — это когда вы не грузите 100 000 товаров из каталога одним запросом, а показываете их страницами по 20–50 штук и подгружаете следующую порцию, когда пользователь домотал до конца.

Звучит как задача на полдня. На практике — по-разному.

Я пишу мобильные приложения уже давно, и каждый раз, когда в новом проекте появлялась пагинация, рядом с ней через месяц-другой появлялся один и тот же набор багов и ad-hoc-решений. Флаги isLoadingNextPage, isLoadingPrevious, isRefreshing, isEmpty, hasError, hasNextPage. Попытки «просто заменить элемент без перезагрузки страницы». Восстановление позиции после убийства процесса. Прыжок на конкретную страницу по deeplink.

На Android есть Jetpack Paging 3, и его берут по умолчанию. Но как только вы выходите за рамки «загрузи следующие 20 элементов на скролле вниз» — начинается интересное. А если ваш проект — Kotlin Multiplatform, то Paging 3 вообще не ваш вариант: это Android-библиотека, она не едет на iOS.

Я расскажу про опенсорсную библиотеку Paginator, которую делаю последние несколько лет. Она работает одинаково на Android, JVM и iOS из одного commonMain, закрывает сложные сценарии из коробки — и даже на самой обычной ленте настраивается короче, чем Paging 3. Это не поход против Paging 3 и не попытка что-то кому-то доказать. Это просто описание того, что есть другой инструмент, и он делает то же самое компактнее.

Читать далее

Волшебный Koog. Пишем Kotlin-агент широкого профиля KMP

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

Всем привет! С вами Анна Жаркова, руководитель мобильной практики ГК Юзтех. Что ж, за последние полгода мир разработки и мир ИИ скакнули и ушли далеко вперед. Теперь знания работы с агентами, умение написать не только правильный промт, но и собственные скиллы (навыки) для этих агентов, готовить свои mcp для погружения в контекст задачи, проекта, становятся не только полезными, но и обязательными для разработчиков и IT-специалистов. Уже многие используют как специальные IDE с ИИ-агентами (Claude, Cursor, Windsurf и т.п), так и встраиваемые в привычные VsCode и AndroidStudio в виде плагинов. Можно не ограничиваться готовым настраиваемым функционалом, а пойти дальше и написать свой собственный агент. И сегодня мы поговорим про такое решение, использование специального фреймворка от JetBrains Koog для разработки свои агентов. С его помощью мы создадим агент для генерации простых KMP приложений и кросс-платформенных задач и подключим к плагину Continue dev.

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

Читать далее

Android и AccessibilityService: защита чувствительных экранов от чтения интерфейса

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

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

Читать далее

Рецензия на книгу «Основы разработки приложений для iOS»

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

Книга iOS 18 App Development Essentials (русское издание — «Основы разработки приложений для iOS») относится к тому типу учебников, которые остаются полезными даже при смене версий платформы. Основание так утверждать состоит в том, что автор выстраивает материал вокруг полного цикла разработки приложения, т.е. от установки набора средств разработки (SDK, Software Development Kit) и настройки среды до публикации в магазине приложений App Store. Такой подход делает книгу не просто справочником по версии iOS 18, а последовательным курсом по созданию приложений для операционной системы iOS в целом.

Читать далее

Почему в C++/Qt нельзя просто взять и забыть про сырые указатели

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

Современный C++ (11/14/17/20…) настойчиво учит нас: «Забудьте про new и delete, используйте умные указатели». Это отличный совет для чистого C++, но как только вы открываете документацию Qt, на вас снова прыгают T*.

Почему даже в 2026 году невозможно написать серьезное приложение на Qt, используя исключительно умные указатели? Давайте разберемся, где «умный» код ломает логику фреймворка.

Читать далее