Обновить
512K+

Android *

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

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

Решение проблемы race condition в Kotlin корутинах

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

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

Читать далее

Самые весёлые TODO из Android-фреймворка

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

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

Читать далее

Создадим команду Wild Politics вместе

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

Здравствуйте, Хабровчане!

Мой предыдущий пост "Как потратить шесть лет и быть невидимкой в Play Market" собрал пусть и не рекордные, но всё-таки 13 тысяч просмотров, благодаря чему в мой пет-проект заглянуло много новых лиц. Я благодарен вам за внимание к игре, отзывы и критику.

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

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

Доступность в Play Market. Вероятнее всего, игру не видно в поиске, в первую очередь из-за того, что она находится на стадии пре-регистрации. Также, ранее слабой была ASO-оптимизация страницы игры (буквально мало "ключевых слов" в тексте описания). Полагаю, ситуация изменится с выходом игры в публичный доступ. Но уже сейчас она собрала более 200 заявок на предварительное скачивание.

Прежде чем публиковать игру для "миллиардов пользователей Google Play", я планирую завершить перевод игры на анг

Читать далее

Восстанавливаем удалённые сообщения в Telegram

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

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

Читать далее

Как в eXpress достигали мгновенного рендера отправки сообщения: оптимизация локальной базы данных

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

Откройте eXpress, и отправьте в чат простое "Привет". Обратите внимание на то, сколько времени прошло между тем, как вы нажали на кнопку "отправить", и тем, как сообщение появилось в чате. Для человеческого глаза отображение отправленного сообщения в чате происходит мгновенно. Это современный стандарт - действия в чате должны происходить максимально быстро. В идеальном случае никаких задержек быть не должно.

Отправка сообщения, тем не менее - это сложная операция, которая требует проделать большой объем работы. Самая существенная её часть - это работа с локальной базой данных. eXpress спроектирован как offline-first, и много данных хранит локально. У одного пользователя могут быть тысячи активных чатов, и десятки/сотни тысяч сообщений, и работа со всеми ними должна оставаться быстрой.

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

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

Наш стек: Kotlin, Room, Coroutines, WebSocket, OkHttp.

Читать далее

Как потратить шесть лет и быть невидимкой в Play Market

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

Всем привет!

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

Если вкратце: шесть лет трачу вечера на то, чтобы написать собственную игру.
Игра доступна на своём сайте, но в Play Market её не видно.

Читать далее

Забудьте про терминал! Как я избавлялся от рутинных ADB команды с помощью Shortcuts

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

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

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

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

В конце статьи ссылки на готовые команды 🌚

Читать далее

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

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели3.1K
В новом дайджесте бажная корзина в Додо Пицце и сложности Combine, улучшение производительности навигации на Android и кодревью “как не войти в айти в 2024”, самые важные пакеты в экосистеме Flutter, 12 маленьких уроков большого приложения для баскетбола, топ быстрорастущих приложений в России в октябре и многое другое. Подключайтесь!

Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

Читать дальше →

Как настроить правильное расположение элементов в Android-приложении для арабского языка

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

Поддержка языков с направлением текста справа налево (RTL), таких как арабский, — важная часть разработки Android-приложений. C помощью следующих шагов можно легко настроить RTL.

Читать далее

Понимание прогноза глюкозы в AndroidAPS часть 2

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

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

Разбирать будем не базовый AndroidAPS от Милоша, а версию от Метью (MTR93600, ссылка на ГитХаб), я же работаю непосредственно вот в этой (ссылка на ГитХаб) версии, которая является измененный вариантом приложения Метью в части прогноза). Идея состоит в том чтобы вывести для отображения самый релевантный прогноз и ввести отдельные коэффициенты для трех типов нагрузок (легкой, средней и тяжелой), а так же отдельный интерфейс для удобного взаимодействия с нагрузками, вывести приложение в часы. Напишите в комментарии, была бы вам такая доработка актуальна? А пока продолжу по теме...

Дисклеймер

Кстати! Эта статья все еще попытка осмысления алгоритма прогнозирования в программе AndroidAPS и предполагает дискуссию. Не стоит воспринимать ее как финальную истину в отношения прогноза. Я стараюсь приводить код и аргументы, которые вы самостоятельно можете оценить и если у вас есть возможность посмотреть код - то и оспорить представленную логику.

Читать далее

Динамические модули в приложениях на Android: опыт использования Dynamic Feature Delivery

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

Размер приложения часто играет важную роль в восприятии его пользователями и принятии ими решения о скачивании. Исследования показывают, что чем меньше размер APK, тем выше вероятность его установки и тем реже оно оказывается в списке на удаление. Конечно же, это важно для команды Яндекс Go, так как наше приложение непрерывно развивается.

Для внедрения одной из SDK, основанной на Flutter, мы прибегли к механизму Dynamic Feature Delivery (DFD). Но оказалось, что в русскоязычном сегменте информации о DFD крайне мало, поэтому я решил поделиться нашим опытом работы с этим механизмом на Android с Google Play Feature Delivery Library.

Сегодня мы подробно разберём, как интегрировать механизм DFD в современную архитектуру Android‑приложения с использованием корутинов, а также протестируем загрузку и установку динамического модуля, использующего Flutter.

Читать далее

Компьютерное зрение на C++: пишем приложение для поиска объектов под Android

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

Привет, Хабр! Меня зовут Кирилл Колодяжный, я пишу код на С++ для систем хранения данных в YADRO. Помимо основной работы, интересуюсь машинным обучением и его возможностями, в том числе на «плюсах». Недавно мне стало интересно разобраться, как развернуть модель компьютерного зрения на мобильном устройстве с операционной системой Android.

 Я изучил доступные инструменты, чтобы понять, какие части приложения можно реализовать на С++, и написать само приложение для телефона. Ни в одном из материалов на подобную тему не описывают реализацию такого приложения от начала до конца, поэтому я собрал свой опыт в серию статей.

Расскажу, как реализовать обнаружение объектов в реальном времени с помощью камеры на мобильной платформе Android с использованием библиотек PyTorch и NCNN и моделей компьютерного зрения YOLOv5 и YOLOv4. Шаблон моего приложения пригодится тем, кто хочет проверить прототип функциональности для компьютерного зрения на С++, использующий OpenCV на Android, но не хочет глубоко погружаться в программирование под Android. 

В первой части цикла мы:

• создадим проект в IDE Android Studio,

• реализуем сессию непрерывного захвата изображений камеры,

• преобразуем изображения в матрицу OpenCV, чтобы сделать дальнейшую работу удобной.

Читать далее

Тесты для функций compose в андроид

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

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

Читать далее

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

Как приготовить MVI в 2024

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

Привет, Хабр! Меня зовут Артем и я автор и ведущий YouTube канала Android Insights

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

Читать далее

Обходим ошибку в системных настройках печати на телефонах RealME

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

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

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

Пробуем разобраться

Мобильная разработка за неделю #559 (7 — 13 октября)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели2.3K
В моей новой подборке странное поведение UserDefaults и признание Google Play монополией, анимации космоса и авто-трекинг производительности, роль продуктового дизайнера, как перехватывают зашифрованный HTTP-трафик, новый рекорд приложений с подпиской и многое другое. Подключайтесь!

Подписывайтесь на мой Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

Читать дальше →

Попробуйте Tauri

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

Хочу рассказать про один из моих любимых Opensource проектов: Tauri. Это среда для создания десктопно-мобильных приложений на JavaScript, но быстрых и легковесных. С опциональными дополнениями на Rust, а через него и на всех других языках.

Читать далее

Как завалить проект и карьеру: 10+ вредных советов разработчику от менеджеров и сеньоров

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели41K
Недавно мы в «Лаборатории Касперского» провели онлайн-митап, где технические менеджеры и разработчики из команды Mobile Dev давали вредные советы про работу и карьеру. В частности, коллеги объясняли, что нужно сделать, чтобы поджечь релиз и затормозить свое развитие, и какие рабочие сигналы игнорировать, чтобы постоянно жить в хаосе.



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

Как зеленый Леруа Мерлен стал желтым Лемана ПРО

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

В последнее время ну очень популярна стала такая вещь, как ребрендинг. Одни меняют лого и название. Другие, вдобавок к этому, еще и кардинально меняют цвета.

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

Будем это исправлять.

Всем привет! Меня зовут Слава. Я мобильный разработчик. И в этой статье я поделюсь своим уникальным опытом того, как Леруа Мерлен стал Лемана ПРО. Собственно, рассказывать буду про мобильную разработку 🤷🏽.

Читать далее

Автотрекинг производительности Room Database

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

Room (абстракция над SQLite) — одна из основных технологий, используемая почти во всех Android-приложениях для кэширования данных, оффлайновости, как cross-process хранилище данных и тому подобное.

При этом скорость работы приложения обычно напрямую зависит от скорости работы с БД, особенно если речь идет о холодном старте, когда все данные хранятся в кэше (в БД).

Встает вопрос: “А не является ли сама работа с БД узким местом скорости старта приложения?

В Wildberries это особенно актуально, так как приложение построено на парадигме offline-first, когда почти вся информация кэшируется в БД, чтобы приложение работало даже с медленным интернетом или без него.

Для ответа на этот вопрос в статье разберем рантайм реализацию автоматического трекинга скорости выполнения запросов и транзакций в Room Database на основе Java Dynamic Proxy.

Читать далее