Обновить
128K+

Android *

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

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

Как мы использовали Codex, чтобы запустить приложение Sora под Android за 28 дней четырьмя инженерами

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

Это статья из официального блога OpenAI, но подход меня так зацепил, что решил перевести для всех. Я тоже часто переношу веб-приложения на мобилки примерно таким же способом и было очень здорово увидеть такой же подход (архитектура+рабочее_приложение-как-пример) у по сути создателей сильного AI. Пишу про разные похожие интересные вещи тут

В ноябре мы представили миру приложение Sora для Android, предоставив любому пользователю с Android-устройством возможность превращать короткие текстовые промпты в живые видео. В день запуска приложение заняло 1-е место в Play Store. За первые 24 часа пользователи Android сгенерировали более миллиона видеороликов.

За этим запуском стоит история: первая версия продакшн-приложения Sora для Android была создана всего за 28 дней благодаря тому же агенту, который доступен любой команде или разработчику – Codex.

С 8 октября по 5 ноября 2025 года небольшая команда инженеров, работая бок о бок с Codex и израсходовав примерно 5 миллиардов токенов (вау), провела Sora для Android от прототипа до глобального запуска. Несмотря на скорость разработки и масштаб, приложение демонстрирует показатель стабильности (crash-free) 99,9% и архитектуру, которой мы гордимся. Если вам интересно, использовали ли мы какую-то секретную модель – нет, мы использовали раннюю версию модели GPT-5.1-Codex, ту самую, которую любой разработчик или компания могут использовать уже сегодня через CLI, расширение для IDE или веб-приложение.

Читать далее

Создание приложения с меню на Flutter, которое не занимает много памяти

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

Расскажу вам в этой статье, как я снизил потребление памяти моего macOS-приложения на Flutter более чем на 90%. Это потребовало неожиданно много усилий и включало создание собственного хоста для Flutter, разработку пользовательского плагина для перетаскивания и отладку кучи кода на Rust.

Некоторое время назад я создал приложение со строкой меню для macOS под названием Quickgif. Оно удовлетворило мою давнюю потребность — иметь инструмент для выборки GIF-картинок, который можно использовать в любом приложении, не загружая GIF-ки вручную и не имея дела с разными реализациями, используемыми в других программах.

Читать далее

Android-смартфон как веб-камера под Linux

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

Врываюсь я тут как‑то на онлайн‑собес в приличную контору с намерением выглядеть серьёзно и трезво. Но вебка моего ноута решила навалить хоррора и выдала такую шакальную картинку, будто я подключился к созвону не из дома, а из колодца Самары Морган. Ощущение, будто каждый кадр несёт астматичный голубь‑стажёр пока видео пытается догнать хотя бы цифру 3 в слове «30 FPS».

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

Что? Твоя вебка на ноуте тоже скулит «Верните мне мой 2007»? Или ты статный Linux‑PC‑боярин, у которого камер столько же сколько друзей в реальной жизни? Не беда — если у тебя под рукой есть более‑менее приличный Android‑смартфон, значит ты зашёл в правильную дверь.

Читать далее

Создание кастомного Toolbar с Jetpack Compose. Подробный разбор всех попыток и решений

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

Привет, Хабр! Меня зовут Максим Сазонов, я android-разработчик в ПСБ. 

Сегодня предлагаю разобрать путь создания кастомного тулбара от первой кривой реализации до оптимизированного решения. 

И главная проблема, которую надо решить при создании этого компонента  это центрирование title и subtitle. Эта проблема возникает потому что у нас может быть тулбар с разным количеством иконок по обе стороны от заголовка, текстом и иконками или только с title. И если ширина иконок у нас стандартна (44 dp), и достаточно просто умножить эту ширину на количество иконок справа, чтобы понять свободное пространство для title и subtitle, то с текстом с одной или с двух сторон всё намного сложнее, так как мы не можем заранее вычислить ширину этого текста, а значит не можем правильно центрировать и задать ширину title и subtitle.

В статье я расскажу, как я решил этот вопрос.

Читать далее

Всё, что нужно знать о публикации в Google Play

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

Недавно я решил опубликовать приложение в Google Play, думая, что это не так сложно. Под эту задачу написал небольшое приложение-счетчик и стал погружаться во все тонкости процесса публикации. Почти сразу стало понятно, почему многие называют это кругами ада.

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

Читать далее

Реверс-инжиниринг приложений на Android: знакомство с Frida

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

Реверс-инжиниринг — это трудоемкая и интересная задача, которая поддается не всем. Любой может «скормить» программу декомпилятору, но не у всех хватит выдержки разобраться в хитросплетениях машинных команд. Процесс становится сложнее, если исследование проводится над программой для другого устройства, например телефона с ОС Android.

Звучит сложно. Долгое время и мне так казалось, особенно при создании модов для приложений. Байт-код smali неплох, но писать на нем сложную логику вручную — неблагодарное занятие. Но недавно мне попался на глаза решение для динамического реверс-инжиниринга — Frida.

Frida — это инструмент, который позволяет вживлять небольшой кусок JavaScript-кода прямо в запущенное приложение и менять его поведение. Под катом я расскажу, как работать с Frida, исследовать приложения на телефоне без root-доступа и создавать свои моды.

Читать далее

Джедайские техники Kotlin: inline-функции и reified-типы

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

Привет, Хабр!

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

Прокачать Kotlin

Секреты под защитой: как мы спрятали ключи приложения с помощью Gradle-плагина

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

Секреты вашего Android‑приложения под надёжной охраной!

Узнайте, как превратить API‑ключи и токены в невидимые в репозитории и APK данные с помощью собственного Gradle‑плагина.

Читать далее

Как мы создали деплой-инструмент для 100+ серверов на Jetpack Compose и GitLab API

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

Всем привет! Меня зовут Сергей, и я Backend Kotlin разработчик в компании занимающейся разработкой систем повышающую безопасность дорожного движения. И я расскажу, как мы с помощью Jetpack Compose и GitLab API упростили процесс деплоя на 100+ распределённых серверов, повысив при этом удобство и предсказуемость процесса.

Читать далее

Играемся с формами M3 Expressive в Android приложении на View

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

В обновлении Material Design 3 Expressive была проведена работа над оживлением пользовательского интерфейса. Одним из нововведений стало добавление 35-ти новых форм, а также поддержка shape morphing между ними.

В Compose всё делается не сложно. Google подготовил подробную документацию, следуя которой можно делать разные забавные вещи. Однако если Вам нравится работать с View больше, чем с Compose – реализовать подобное будет проблематично. Поэтому я решил попытаться упростить эту задачу и написать свою небольшую библиотеку для этого...

Читать далее

Основы AGSL для android разработчика

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

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

Представь: тебе нужно «поколдовать» над пикселями прямо в UI - добавить живой градиент, искажение картинки под пальцем, стеклянный блеск карточке и тому подобные эффекты. Раньше для этого приходилось прибегать к «тяжеловесам» таким как OpenGL/Vulkan, либо мучить CPU постобработкой битмапов. AGSL (Android Graphics Shading Language) решает это элегантнее: это язык фрагментных шейдеров, встроенный в сам графический стек Android, так что эффекты применяются прямо на уровне отрисовки интерфейса.

Читать далее

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

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

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

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

Код Kotlin корутин выполняется в потоках, но важно понимать, что корутины не привязаны жестко к конкретным потокам. Их выполнение управляется диспетчерами (Dispatchers), которые определяют, в каком потоке или пуле потоков будет работать корутина.

Как мы обсуждали в Как выглядит Kotlin Coroutine без макияжа при создании корутины создается объект Continuation, в котором содержится код, который выполняет корутина. Код делится на блоки - suspend-функции с помощью switch. Когда код доходит до suspend-функции она вызывается и в неё передается весь текущий объект Continuation и на этом это ответвление switch заканчивается. Suspend-функция по завершению своей работы вызывает метод resume у переданного ей объекта Continuation и таким образом начинается выполнение следующего ответвления switch'a.

Мы всё это вспомнили не просто так:

объект Continuation, который мы обсуждаем на всех этапах передается в специальной обёртке DispatchedContinuation.

Именно на этой обертке и вызывается метод resume, который выделяет поток и вызывает resume у объекта Continuation.

Исходя из изложенного выше мы можем понять механизм смены потока - он может меняться при каждом вызове метода resume у объекта DispatchedContinuation.

Доступны следующие диспетчеры:

Читать далее

Работа с RTSP-плеером во Flutter: выбор библиотеки и снижение задержки

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

Работа с RTSP-потоками во Flutter остаётся задачей, которую нельзя решить штатными средствами фреймворка. Базовый плагин video_player не поддерживает RTSP, из-за чего прямое воспроизведение видео с IP-камер и систем наблюдения недоступно без сторонних решений. Для корректной работы в таких сценариях требуется специализированный плеер, обеспечивающий стабильное отображение потока и минимально возможную задержку.

В данной статье мы рассмотрим основные библиотеки для работы с RTSP во Flutter — flutter_vlc_player, fijkplayer и media_kit, сравним их особенности, достоинства и влияние на задержку воспроизведения. Отдельное внимание уделим настройкам, которые позволяют минимизировать latency, прежде всего в решениях на базе FFmpeg. Также разберём доступные параметры оптимизации в flutter_vlc_player. 

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

Читать далее

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

Управление потоком в Kotlin Flow

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

Поколение большого пальца – вот как нас называли. Какие глубокомысленные переписки мы ухитрялись вести на кнопочных телефонах, набирая текст SMS большим пальцем асинхронно с конспектированием лекций…

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

Естественно, в Kotlin Flow, где данные текут непрерывным потоком и легко провоцируют избыточные реакции, эта проблема стоит особенно остро. Например, если мы построим на Flow систему автодополнений, то увидим что-то такое:

Читать далее

Live Updates на Android: где макеты врут, a SDK ставит границы

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

Весной 2025 года Google представила Live Updates, аналог Live Activity в iOS. Мы быстро запушили продактов — «нам такое надо!» — и потащили фичу в Android-приложение Додо Пиццы.

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

Читать далее

Почему ваш кастомный emoji будет ломать TextField (и как это починить)

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

Разрабатывая приложение под Android — мы встроили в продукт свой мессенджер и решили, что стандартные андроидные смайлики — это преступление против дизайна. Telegram и другие популярные мессенджеры давно показали, как должны выглядеть эмоции в чате, а Google всё ещё живёт в 2015-м с Noto Color Emoji.
Хотели просто подменить парочку 😎👩‍💻🙂 на свои красивые… И получили войну: курсор, который живёт своей жизнью, тофу, кернинг и полный хаос при вводе.
Эта статья — история о том, как мы прошли все круги ада и всё‑таки победили систему.

Спойлер: победили костылями.

Читать далее

Почему ваш сайт ломается, когда его трогают пальцем

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

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

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

Привет! На связи Полина, фронтенд-разработчик в Selectel. Раньше я тоже думала, что адаптив в десктопном браузере абсолютно такой же, как на телефонах. Да и вообще мобильный браузер — это просто браузер поменьше (спойлер — нет). В этой статье я расскажу об их различиях, что с этим делать, как прокинуть localhost на реальный телефон и получить DevTools от браузера в смартфоне, чтобы ловить поменьше багов на проде.

Читать далее

Наш опыт публикации мобильных приложений. Часть 2: AppGallery и RuStore

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

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

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

Материал предназначен для заказчиков, разработчиков, продакт-менеджеров и технических специалистов, отвечающих за релиз и сопровождение мобильных продуктов.

Читать далее

Мобильная разработка за неделю #611 (17 — 23 ноября)

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

В новом дайджесте вопрос с собеседования, на котором сыпятся даже Senior-ы, стабильный Navigation 3 и нестабильная ViewModel, кросс-компиляция, 100 уроков развития проекта, открывашка из трубки домофона и многое другое. Заходите!

Читать далее

Кросс-компиляция и запуск консольного Go‑приложения на Android, Windows, macOS и Linux

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

Делюсь опытом кросс-компиляции и запуска консольной программы на Go из-под Linux в другие ОС: Android, Windows. Для сетевых сервисов, утилит, криптопрограмм и других решений без GUI это может быть весьма полезно.

Читать далее