Обновить
195.74

Android *

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

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

Интеграция Predictive back в Android

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров751

В Android 13 Google представил новую «фишку»: predicitve‑навигация. Это API позволяет пользователю «посмотреть» на какой экран он вернется, не выполняя непосредственно возврат. Подобный функционал довольно давно есть в iOS и, например, в Telegram на Android. Теперь же данный функционал должен работать в Android «из коробки», а с Android 16 будет включен по умолчанию. Немного поресерчив тему можно найти для его работы необходимо включить флаг enableOnBackInvokedCallback и мигрировать на BackPressedDispatcher. Посмотрим так ли это.

Читать далее

Android для новичков: как не наломать дров с корутинами и какие привычки оставить в прошлом

Время на прочтение8 мин
Количество просмотров3.8K

Когда только начинаешь разрабатывать под Android, самые неприятные баги появляются не из-за опечаток, а из-за систематических ошибок. Хардкод строк и цветов, корутины, которые живут сами по себе, попытки писать Compose по старинке, как старые view — всё это превращается в технический долг, который мешает развивать продукт. 

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

Исправить ошибки в Android-разработке

Мобильный клиент для LM Studio с удаленным доступом

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

Предисловие. Я тут работаю с lmstusio сервером и мне нужно было приложение на andriod которое бы с ним работало быстро и без всяких дополнительных танцев с бубном. Сделав его я подумал почему бы не предложить другим может кому то же надо. Выглядит он так

Читать далее

К вопросу о шифровании данных на мобильных устройствах бизнес-пользователей

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

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

Представьте, что ваш телефон — это личный сейф, в котором хранятся самые ценные и конфиденциальные вещи. Что если кто‑то получит доступ к этому сейфу? Важно, чтобы доступ к вашим данным был только у вас. Именно здесь на помощь приходит шифрование.

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

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

Процесс шифрования данных

Представим, что у нас есть некоторая шкаф‑картотека с ящиками, которая стоит в нашем офисе. Любой ящик можно открыть, достать карточку и прочитать ту информацию, которая на ней написана.

Читать далее

UI Kit как рычаг роста: как связать Figma и код

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

Как превратить UI Kit из дизайнерского артефакта в живую систему, где обновление стиля в Figma автоматически обновляет код на Android.

В статье — наш путь от ручного копирования палитр до генерации типобезопасных токенов через KotlinPoet, Gradle-плагины и Figma JSON.

Расскажу, как бизнес получает скорость и консистентность, как темная тема перестаёт быть болью, и почему iOS может безболезненно присоединиться к этой архитектуре.

Читать далее

Bricks: от идеи до UI за 60 секунд

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

Привет! Я — Дмитрий Гусев, Frontend-разработчик в команде Bricks в кластере Core Services в Авито, в статье подробно рассказываю, как и зачем мы внедрили механизм предварительного просмотра проектируемого интерфейса в реальном времени прямо в админку Bricks: зачем это понадобилось, как всё устроено под капотом и с какими неожиданностями столкнулись по пути.

Предварительно просмотреть!

Шутки и веселье в публичном Android API

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

Ранее я рассказывал об относительно малоизвестной и ныне удалённой строке-заполнителе в Android, использовавшейся в качестве пасхалки. Это был выдуманный оператор сотовой связи под названием El Telco Loco. Сегодня я расскажу о методах и других частях публично доступного Android API, которые могут показаться больше смешными, чем полезными. Это пасхальные яйца, шутки, видимые только разработчикам приложений для Android, но не обычным пользователям.

Читать далее

Мобильная разработка за неделю #606 (6 — 12 октября)

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

В этом выпуске отрисовка SF Symbols в SwiftUI и краши Android-приложений, неблокирующие заставки и история о переезде на React Native, физический продукт, вместо очередного SaaS, запрет бесплатных раздач приложений от Apple, Топ-10 лучших бесплатных нейросетей и многое другое. Заходите!

Читать далее

Vivaldi 7.6 для мобильных устройств — Всё в ваших руках

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

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

Читать далее

Почему моё Android-приложение крашится?

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

Привет! Меня зовут Абакар, я работаю главным техническим лидером разработки в Альфа-Банке.

Если вы Андроид-разработчик, думаю, вам часто приходилось сталкиваться с ситуациями, когда код вашего приложения выбрасывает необрабатываемое исключение и ваше приложение закрывается. На сленге можно сказать, что «приложение крашится».

Сегодня мы с вами разберёмся, почему это происходит и какие механизмы лежат в основе такого поведения. Итак, в путь!

Читать далее

Kick для QA-инженеров

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров547

Kick (Kotlin Inspection & Control Kit) – это кроссплатформенный модульный набор инструментов отладки, встроенный прямо в приложение. Он позволяет отображать нужные переменные в плавающем окне, инспектировать логи, сетевой трафик, базы данных SQLite/Room, файловую систему и т.д. Kick фактически заменяет множество разрозненных утилит единым решением: больше не нужно переключаться между разными программами или консолью – все необходимые средства собраны в одном интерфейсе. Это снижает сложность диагностики: тестировщик получает полный обзор состояния приложения на Android, iOS и Desktop из одного окна.

Читать далее

Мобильная разработка за неделю #605 (29 сентября — 5 октября)

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

В новом дайджесте OCR-сервер на iPhone и разработчики против регистрации Google, скрытые угрозы Room и golden-тесты во Flutter, Kotlett и динамические обновления без релизов и BDUI, мобильный интерфейс без человека, приложения, вышедшие в августе, и заработавшие больше $50К и многое другое. Заходите!

Читать далее

Построение KMP SDK: инсайты и подводные камни из нашего опыта

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров532

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

Кратко напомним про контекст и продукт: Instories — мобильный видеоредактор для маркетологов, SMM-специалистов и блогеров. Контекст проекта: желание получить ряд SDK (мы называем их Kit-ами, по сути это разные сборки SDK для разных продуктов, со своими ресурсами, фичами и дизайн системой) для наших уже существующих приложений, которые содержали бы в себе коробочные фичи (и бизнес-логику, и UI), готовые к подключению, а также были бы легко расширяемыми и переиспользуемыми для разных приложений компании.

Читать далее

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

Построение KMP SDK: единая дизайн-система и управление ресурсами

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров417

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

Да, в Compose Multiplatform есть базовая работа с ресурсами: можно работать со строками, картинками и файлами по аналогии с Android проектами, однако что делать, когда для каждого продукта под одним и тем же ключом локализации должна срываться своя строка? В этой статье мы поделимся своим подходом и инсайтами.

Кратко напомним про контекст и продукт: Instories — мобильный видеоредактор для маркетологов, SMM-специалистов и блогеров. Контекст проекта: желание получить ряд SDK (мы называем их Kit-ами, по сути это разные сборки SDK для разных продуктов, со своими ресурсами, фичами и дизайн системой) для наших уже существующих приложений, которые содержали бы в себе коробочные фичи (и бизнес-логику, и UI), готовые к подключению, а также были бы легко расширяемыми и переиспользуемыми для разных приложений компании.

Читать далее

Построение KMP SDK: проектирование архитектуры для feature-модулей

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров427

В предыдущих статьях (раз и два) мы рассмотрели, почему выбрали Kotlin Multiplatform для нашего SDK, а также подробно разобрали базовую архитектуру проекта, включая core-модули и организацию Kit-ов. Теперь настало время погрузиться в самое интересное — архитектуру отдельной фичи и то, как мы организовали взаимодействие между модулями.

Эта статья будет особенно полезна тем, кто хочет понять, как на практике реализовать feature-first подход в KMP проекте, как правильно организовать DI, навигацию и работу с ресурсами в многомодульной архитектуре.

Кратко напомним контекст и продукты: Instories — мобильный видеоредактор для маркетологов, SMM-специалистов и блогеров. Контектс проекта: желание получить ряд SDK (мы называем их Kit-ами, по сути это разные сборки SDK для разных продуктов, со своими ресурсами, фичами и дизайн системой) для наших уже существующих приложений, которые содержали бы в себе коробочные фичи (и бизнес-логику, и UI), готовые к подключению, а также были бы легко расширяемыми и переиспользуемыми для разных приложений компании.

Читать далее

Построение KMP SDK: базовая архитектура для общей библиотеки

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров457

В прошлой статье было много текста о том, почему мы стали смотреть в сторону кроссплатформенной разработки и почему мы в Instories выбрали именно Kotlin Multiplatform (далее — KMP) для своего решения.

Кратко напомним контекст и продукты: Instories — мобильный видеоредактор для маркетологов, SMM‑специалистов и блогеров. Контектс проекта: желание получить ряд SDK (мы называем их Kit‑ами, по сути это разные сборки SDK для разных продуктов, со своими ресурсами, фичами и дизайн системой) для наших уже существующих приложений, которые содержали бы в себе коробочные фичи (и бизнес‑логику, и UI), готовые к подключению, а также были бы легко расширяемыми и переиспользуемыми для разных приложений компании.

Мы выбрали использовать многомодульную архитектуру, чтобы каждая фича была инкапсулирована в своем модуле и не влияла на другие фичи, а также разделили проект на несколько крупных пакетов: kits, core и feature. В данной статье мы рассмотрим первые два пакета с технической точки зрения, а также поделимся причинами и инсайтами для выбранных решений.

Читать далее

Как я писал свою звонилку для видеозвонков

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

Я написал свою альтернативу звонкам в WhatsApp и Telegram — полноценный Android-клиент на WebRTC с поддержкой P2P-аудио и видео, STUN/TURN, сигналингом и собственным UI.

Забудьте про «корпоративные мессенджеры»: проект JOPA Call (👉 «Just One Peer App») работает напрямую, без лишних посредников.

Реализовано: peer-to-peer соединения, fallback через TURN, мини-preview окна камеры, управление потоками и адаптивное видео.

Макс и его «супераппы» могут курить в сторонке — теперь у меня есть свой звонок-клиент, который не зависит от гигантов.

Читать далее

Построение KMP SDK: наш опыт, плюсы и минусы, и как это изменило разработку

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров961

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

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

Именно с такими вызовами столкнулась наша команда, когда мы начали искать способы оптимизации процесса разработки для iOS и Android платформ.

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

Читать далее

Укрощаем Android UI-тесты на Compose: как Page Object спас нас от рутины

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

Привет, Хабр! Вы когда-нибудь тратили слишком много драгоценного времени на поиск нужного testTag в иерархии Compose Screen? А потом ещё полдня чинили тесты после каждого чиха в UI? Или, может быть, несколько недель ждали, пока в дизайн-систему добавят недостающий тег или семантику, чтобы вообще начать писать свой UI-тест? Если вы хоть на один вопрос ответили «Да», эта статья для вас. Давайте навсегда покончим с этой рутиной и займемся более креативными задачами!

Цель статьи — НЕ представить очередной фреймворк написания UI-тестов для приложений на Android, а упростить их написание с помощью всем знакомого Page Object. Мы будем прятать рутину поиска нужных компонентов и одновременно повышать устойчивость тестов к изменениям. Всё для того, чтобы тесты стали удобнее, надёжнее и проще поддерживались.

Меня зовут Дмитрий Омельченко, я Android-разработчик в Райффайзенбанке. Несколько лет назад мы с командой начали внедрять автоматизацию тестирования в приложение online-банка, и за это реализовали несколько интересных решений, об одном из которых хочу вам рассказать.

Читать далее

Почему loadKoinModules и unloadKoinModules в Koin могут ломать ваши зависимости и как этого избежать

Время на прочтение2 мин
Количество просмотров510

В Android-проектах Koin остаётся одной из самых популярных DI-библиотек, особенно в MVP/MVI и Compose-приложениях. Она проста в настройке, гибкая и хорошо работает в больших кодовых базах.

Но многие команды, стремясь к модульности и тестопригодности, начинают активно использовать функции loadKoinModules() и unloadKoinModules(). И здесь разработчики часто натыкаются на странную ошибку -_-

Читать далее