Как стать автором
Обновить
245.34

Разработка под Android *

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

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

Дайджест мобильной разработки за июль

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

Релизы Kotlin 1.9.0, Jetpack Media3 1.1.0, ADB Enhanced, тёмная тема в RuStore — и другие важные новости рынка мобильной разработки в июле 2023 года.

Читать далее
Всего голосов 28: ↑25 и ↓3+22
Комментарии2

Kiosk (Lock task mode) для Android: польза, кейсы применения и кастомизация

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5K
Привет, Хабр! Меня зовут Светлана Палицына, я — Android-разработчик в мобильной команде «Лаборатории Касперского», где мы создаем решения для защиты мобильных устройств.

Мои коллеги из Kaspersky уже рассказывали о наборе решений и технологий для управления поведением устройств, известном как Mobile device management (про ее применение в iOS можно прочитать здесь, а про использование в Android — здесь). Я же подробно рассмотрю один из режимов этого механизма — Lock task mode, также известный как Kiosk-режим.



Статья будет полезна Android-разработчикам, которые хотят дать своим пользователям возможность работы их устройств в режиме одного или нескольких приложений и пополнить копилку знаний информацией о возможностях MDM.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии7

Как мы запустили официальный российский магазин приложений RuStore

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

25 мая 2022 года вышла бета-версия магазина приложений RuStore. Сегодня им пользуется более 10 миллионов человек для загрузки приложений на мобильные устройства. Команда стора рассказывает о том, как начался проект, его развитии и планах.

Читать далее
Всего голосов 54: ↑33 и ↓21+12
Комментарии39

По ту сторону фидбека: как проходят Android-собеседования и чего мы ждём от кандидатов

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

Подбор кандидатов в компанию — вопрос важный и тонкий. Вы ищете команду мечты. Мы хотим найти человека, с которым сможем плечом к плечу разрабатывать сложные фичи, бороться с багами и непринуждённо общаться за чашкой кофе. Эти стремления, как «струи Арагвы и Куры», ведут в одно место встречи — техническое интервью.

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

Меня зовут Александр Гирев, я Android-разработчик в Альфа-Банке, участвую в технических собеседованиях и знаю, что происходит по ту сторону «Зума» во время интервью :)

Читать далее
Всего голосов 30: ↑28 и ↓2+26
Комментарии8

Истории

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android

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

Для многих разработчиков приложений далеко не секрет, что экосистема Android не предполагает написание полностью нативных приложений: в этой платформе очень многое завязано на Java и без ART можно запустить только простые службы без какого-либо интерфейса. Однако, есть один способ писать практически под «голый» Linux, не перекомпилируя ядро и при этом пользоваться самыми интересными фишками устройства без оверхеда в виде тяжелого Android: ускорение 3D-графики (OpenGLES), микшер звука, ввод с различных устройств, OTG, Wi-Fi и если очень постараться — даже 3G. Это открывает множество разных интересных применений старым устройствам: «железо» смартфонов зачастую гораздо мощнее современных недорогих одноплатников. Сегодня я покажу вам, как написать и запустить программу, которая полностью написанное на C без Android, на No-Name Android-смартфоне практически без модификаций. Интересно? Жду вас в статье!
Читать дальше →
Всего голосов 93: ↑92 и ↓1+91
Комментарии38

BDUI аналитика, или Почему нельзя просто взять и отправить значения динамических полей в трекер

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

Как изменить текст на кнопке без релиза мобильного приложения? Как показать пользователю новые экраны, если приложение удалили из официальных магазинов? с помощью Backend Driven UI — подхода, когда экраны на фронте настраиваются с помощью сервера.

Но в этом случае экраны не содержат бизнес-логики, теперь это просто список абстрактных полей. Как формировать события продуктовой аналитики? Ведь смысл пришедших полей не известен. А если (точнее «когда») на сервере поменяется ID или добавится новое поле, то…нам придется на стороне мобильного приложения менять код и выпускать релиз?...

Может сделать дешёво и сердито и отправить просто все значения динамических полей, как они есть, в трекер? И это было бы действительно хорошим и быстрым решением для прототипа. Если бы мы не были банковским приложением. Ведь у нас хранятся самые ценные пользовательские данные — паспортные, адреса, номера карт и количество денег на счету. Неееет, отправлять поля без всякой фильтрации в трекеры совершенно нельзя. 

Значит нужно на каждое поле повесить какой-то признак можно его отправлять или нет? А если можно, то нужно ли его маскировать, например, если это номер карты или счета? И мы решили выбрать путь героя и сделать всё правильно. 

Читать далее
Всего голосов 18: ↑18 и ↓0+18
Комментарии3

Что порой кроется за «успехом»

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

Хочу рассказать вам свой путь в поиске новой работы в 2023 году и поддержать тех, кто сейчас проходит через это. За 6 месяцев я собеседовался в 25 компаний, прошел 54 этапа (а какие-то не прошел), получил 2 оффера и в итоге один из них принял. Если вы сейчас в поиске работы, эта статья будет для вас глотком свежего воздуха. Если же вы матерый специалист, устраивающий процессы онбординга в своей компании, вам это может быть интересно с другой стороны.

Читать далее
Всего голосов 104: ↑99 и ↓5+94
Комментарии140

Развлечение на выходные: собираем Android для Raspberry Pi из исходного кода

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

Привет, Хабр! В этой статье я хочу поделиться пошаговой инструкцией по компиляции Android Open Source Project для Raspberry Pi. Эта статья поможет разобраться в первых шагах разработки ОС на базе Android Open Source Project.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии4

Дайджест мобильной разработки за июнь

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

Релизы NativeScript для Storybook v7, Fluent 2, новые API в RuStore — и другие самые важные новости рынка мобильной разработки в июне 2023 года.

Читать далее
Всего голосов 24: ↑23 и ↓1+22
Комментарии1

Как мы запускали демоприложения

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

Те, кто работал над крупным Android-проектом с множеством модулей, не понаслышке знают, что такие проекты могут долго собираться. Неважно, что мы делаем — исправляем баг или разрабатываем фичу, нам нужно собрать проект, чтобы увидеть, как изменения повлияли на приложение. Мы тратим время на ожидание сборки проекта, и это влияет на продуктивность. 

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

Меня зовут Олег Шелякин, я ведущий Android-разработчик в мобильном банке Тинькофф. Статья будет интересна тем, кто работает над многомодульным проектом, где количество модулей перевалило за сотню, время синхронизации измеряется в минутах, а время сборки — в десятках минут.

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии16

От потоков к корутинам: как и почему видоизменились примитивы синхронизации в языке Kotlin (Часть 1)

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

В этой статье мы рассмотрим, как и почему изменилась реализация примитивов синхронизации из стандартной библиотеки Java и пакета java.util.concurrent для Kotlin Coroutines и для языка Kotlin в целом.

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

Оценим готовность текущих решений к использованию в Kotlin Multiplatform.

Разработаем аналоги нескольких полезных классов пакета java.util.concurrent, до которых еще не добрались разработчики корутин.

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

Читать далее
Всего голосов 13: ↑13 и ↓0+13
Комментарии9

Моя история: разработчик в 16

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

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

Мне на данный момент 16 лет, я еще учусь в школе и умею разрабатывать приложения под Android. Тяжело оценивать свой уровень, когда ты еще не можешь устроиться на работу, но посмотрев требования и выполнив разные тестовые задания, я понял, что на джуна я могу точно. (я знаю, что также важен опыт работы в команде итд)

Разделю свою историю на 3 части.

Читать далее
Всего голосов 22: ↑19 и ↓3+16
Комментарии32

Как я перестал волноваться и полюбил ошибки в Kotlin корутинах: Мифы обработки ошибок в корутинах

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

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

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии20

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

Скажи что-нибудь на разрабском, Figma

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

Привет! С вами Виктор 👺, тэнгу‑хранитель одной из дизайн‑систем Ozon.

В июне 2023 года Figma выкатила мощное обновление, во многом ориентированное на разработчиков. Точнее на поиск общего языка между проектировщиком и программистом. Я давно занимаюсь дизайн‑системами и знаю как тесно связан дизайн и код. Насколько взаимопонимание между дизайнером и разработчиком ускоряет доставку продукта до пользователя.

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

Помогут ли новые фишки Figma наладить общение?

Потрогаем Dev Mode →
Всего голосов 41: ↑41 и ↓0+41
Комментарии15

Какие баги мы заложили в мобильный банк на PHDays 12: разбор конкурса $NATCH

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

В мае в центральном парке Москвы — в Парке Горького — отшумели яркие Positive Hack Days. Впервые за 12 лет форум по практической кибербезопасности, ранее объединявший только экспертов по ИБ и этичных хакеров со всего мира, превратился в открытый киберфестиваль. Мы построили современный кибергород с интересными заданиями и квестами, проходя которые, посетители знакомились с тем, как устроен цифровой мир, проверяли свою киберграмотность и учились доверять новым технологиям, усваивая принципы кибербезопасности. 

Помимо серьезных докладов по информационной безопасности и грандиозной кибербитвы Standoff, ежегодный Positive Hack Days полюбился техническим энтузиастам за конкурсы, в ходе которых они испытывают на прочность различные IT-системы и устройства, оттачивают навыки по их защите и получают памятные призы. На прошлогоднем PHDays исследователи безопасности с азартом искали слабые места в нашем онлайн-банке, банкоматах и POS-терминалах, пытались обойти IDS и сломать ИИ. В этот раз мы отдали участникам на растерзание обновленные традиционные мишени, а также приготовили новинку — уязвимое банковское мобильное приложение. Итоги этого конкурса (как и отчеты участников 😔) не оставили нас равнодушными, поэтому мы подготовили его райтап.

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

Подробнее
Всего голосов 12: ↑12 и ↓0+12
Комментарии7

Как катить фичи без релизов. Часть 2: про низкоуровневый Server Driven UI

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

Server Driven UI в Альфа Банке — это низкоуровневый и гибкий подход для реализации динамической отрисовки UI, управляемый с сервера. Если дословно перевести, то SDUI переводится как пользовательский интерфейс (UI), управляемый сервером. На деле так и получается — API сообщает фронту, что и с каким содержимым отображать. 

Например, если дизайнер указал, что цвет фона в UI-компоненте кастомизируется, то SDUI модель для этого компонента должна по умолчанию уметь настраивать цвет с бэкэнда. Аналогично со всеми другими свойствами компонентов: шрифт, размер, форма. 

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

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии14

Осознанная оптимизация Compose

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

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

Наша команда Ozon Seller также столкнулась с этой проблемой. Мы решили собрать воедино все советы и наработки по написанию оптимизированного Compose-кода. Активное применение этих советов при оптимизации существующих экранов и написании новых существенно улучшило наши метрики: длительность лага по отношению к длительности скролла (hitch rate; чем меньше, тем лучше) экранов со списками упала в среднем с 15-19 % до 5-7 % (на 90-м перцентиле). Все эти советы и наработки мы описали в этой статье. Она будет полезна и начинающим, и опытным разработчикам, в ней подробно описаны оптимизации и механизмы Compose, а также рассказано про слабо задокументированных особенности и исправления ошибок, которые есть в других статьях. Давайте же начнём.

Читать далее
Всего голосов 37: ↑37 и ↓0+37
Комментарии15

Какого цвета Ripple?

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

Такой вопрос возник у меня однажды. А потом еще раз. И я решил разобраться.
Спойлер: конкретного ответа у меня нет. Зато есть исследование.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

Библиотека MockWebServer-DSL в open-source: делаем конфетку из сетевых запросов в UI-тестах

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

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

Сегодня мы выпускаем в open-source собственную библиотеку MockWebServer DSL. Она помогает удобно писать обработчики запросов на бэкенд в Android-тестах.

И как она работает?
Всего голосов 13: ↑13 и ↓0+13
Комментарии0

Подписываем Android-приложение внутренним ключом Google Play для публикации в сторонних магазинах (RuStore, Huawei..?)

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

В процессе публикации своего приложения в RuStore, я столкнулся с проблемой обновления сборки, первоначально-установленной из Google Play. Дело в том, что несколько лет назад, когда я размещал приложение в Google Play, я доверил управление ключами подписи Google App Signing. Это значит, что мой локальный ключ используется в качестве "загрузочного", а пользователи на устройства получают уже сборки, подписанные внутренним ключом Google. Прямого доступа к этому ключу нет, и, соответственно, я не могу подписать им сборку для RuStore для бесшовного обновления приложения.

Читать далее
Всего голосов 30: ↑30 и ↓0+30
Комментарии2