Pull to refresh
0
0
Алексей @Aleksei4990

Android разработчик

Send message

Архитектура кроссплатформенного многомодульного приложения

Level of difficultyHard
Reading time11 min
Views6.2K

Хочу поделиться своим опытом создания кроссплатформенного приложения на базе kotlin-multiplatform (KMP), организации его архитектуры, настройки для работы с различными библиотеками и особенностями его работы. Статья подойдет в первую очередь разработчикам, которые уже имеют опыт с многомодульными проектами в android и начинают изучать KMP. В конце я опишу свою реализацию архитектурного паттерна MVI и его применение в проекте.

Читать далее
Total votes 7: ↑7 and ↓0+9
Comments2

Разработка быстрых мобильных приложений на Android. Часть первая

Reading time8 min
Views39K
В Edison мы часто сталкиваемся с оптимизацией мобильных приложений и хотим поделиться материалом, который считаем крайне полезным, если вы решаете одну из двух задач: а) хотите чтобы приложение меньше тормозило; б) хотите сделать красивый, мягкий и гладкий интерфейс для массового пользователя.
Предлагаем вашему вниманию первую часть перевода статьи Udi Cohen, которую мы использовали как пособие для обучения молодых коллег оптимизации под Android.



Несколько недель назад я выступил на Droidcon в Нью-Йорке с докладом об оптимизации производительности Android.

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

Мои основные правила, которым я следую при работе с оптимизацией:
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments2

Многомодульный BDSM: стоит ли внедрять Gradle модули и какие типы модулей бывают?

Level of difficultyMedium
Reading time17 min
Views9.9K

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

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

Надеюсь, к концу статьи вы станете на чуточку ближе к ответам на вопросы: «Каким образом вообще можно внедрить многомодульность в свой проект?», «Какие типы модулей есть?» и «Нужна ли многомодульность в моём проекте?»

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments3

Kaspersky Mobile Talks #1. Многомодульность

Reading time8 min
Views9.5K

В конце февраля мы запустили новый формат встреч Android-разработчиков Kaspersky Mobile Talks. Основное отличие от обычных митапов — здесь вместо сотни слушателей и красивых презентаций на несколько различных тем собрались «бывалые» разработчики, чтобы обсудить всего лишь одну тему: как они реализуют многомодульность в своих приложениях, с какими проблемами сталкиваются, и как их решают.


Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments0

Многомодульность в Android с точки зрения архитектуры. От А до Я

Reading time20 min
Views64K
Всем привет!

Не так давно мы с вами осознали, что мобильное приложение — это не просто тонкий клиент, а это действительно большое количество самой разной логики, которое нуждается в упорядочивании. Именно поэтому мы прониклись идеями Clean architecture, прочувствовали, что такое DI, научились использовать Dagger 2, и теперь с закрытыми глазами способны разбить любую фичу на слои.

Но мир не стоит на месте, и с решением старых проблем приходят новые. И имя этой новой проблемы — мономодульность. Обычно об этой проблеме узнаешь, когда время сборки улетает в космос. Именно так и начинаются многие доклады про переход на многомодульность (раз, два).
Но почему-то все при этом как-то забывают, что мономодульность сильно бьет не только по времени сборки, но и по вашей архитектуре. Вот ответьте на вопросы. На сколько у вас AppComponent большой? Не встречаете ли вы периодически в коде, что фича А зачем-то дергает репозиторий фичи Б, хотя вроде такого быть не должно, ну или оно должно быть как-то более верхнеуровнево? Вообще у фичи есть какой-то контракт? А как вы организовываете общение между фичами? Есть какие-то правила?
Вы чувствуете, что мы решили проблему со слоями, то есть вертикально все вроде хорошо, но вот горизонтально что-то идет не так? И просто разбиением на пакеты и контролем на ревью не решить проблему.

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

В своей статье я хочу вам рассказать, как дошел до многомодульности именно с архитектурной точки зрения. Какие проблемы меня беспокоили, и как я их старался поэтапно решать. А в конце вас ждет алгоритм перехода с мономодульности на многомодульность без слез и боли.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments18

Как подружить JUnit 5 и Robolectric?

Level of difficultyMedium
Reading time8 min
Views1.9K

Задавались ли вы вопросом, почему Robolectric не работает JUnit 5? В этой статье расскажу, как подружить Robolectric и JUnit 5 и как мы смогли это сделать в команде. 

Вы узнаете, как запустить JUnit 4 тесты при совместном использовании с JUnit Jupiter с помощью тестового движка Vintage. А ещё — как с JUnit Platform разработчики Kotest и Spock Framework создавали свои тестовые фреймворки.

Чтобы разобраться с этими вопросами, проясним мотивы разработчиков, которые создавали JUnit 5, и сравним архитектуру JUnit 4 и JUnit 5, ограничения и возможности этих библиотек.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments0

Как жизнь сортирует нас пузырьком, или Почему в ИТ войдут не все

Level of difficultyEasy
Reading time7 min
Views54K

Год назад я написал бы о том, что каждый может стать программистом, нужно лишь верить в себя, и всё получится. Два года назад я бы добавил пару строк про нити Вселенной, Закон притяжения и материальность мыслей.

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

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

Читать далее
Total votes 75: ↑63 and ↓12+57
Comments207

Эволюция Server-Driven UI: динамические поля, хэндлеры и многошаг

Reading time7 min
Views27K

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

В статье покажу, на каких экранах мы его применяем, и расскажу, как развивались у нас подходы гибкого UI, какие плюсы и минусы мы вывели из его использования. Сначала рассмотрим формы на динамических полях, контракты и ​тонкие моменты создания новых полей. Потом поговорим про динамические флоу, как за ноль калорий на стороне фронта добавлять новых провайдеров для проведения оплаты и закончим зависимыми полями. Всё это с примерами экранов мобильного приложения. 

Читать далее
Total votes 34: ↑33 and ↓1+32
Comments20

Всем выйти из сумрака: как добавить тень на Android

Reading time10 min
Views9.3K

Когда заходит речь про тени на Android, возникает сразу несколько вопросов. Первый: зачем они нужны? Второй: почему нельзя использовать системные тени и жить счастливо? Третий: если нельзя использовать системные тени, как реализовать кастомные?

Это Сергей Петров, Android-разработчик в команде Design System inDrive, и вместе мы поговорим о тенях на Android.

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments4

Используем делегаты в android-приложениях

Reading time10 min
Views9.9K

Всем привет, меня зовут Алексей, и я отвечаю за разработку android-приложений в Константе. У нас в компании есть несколько проектов с большим набором функций, часть из которых присутствует во всех (или, по крайней мере, во многих) разделах интерфейса приложения. Речь идет об авторизации (регистрация + вход), добавлении товаров в корзину, информации о балансе пользователя, уведомлениях о новых входящих сообщениях или т.д.

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

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments1

Жизненный цикл Activity Stack (часть 2)

Reading time13 min
Views29K
Как и договаривались в первой части статьи, в этой мы будем рассматривать инструменты для изменения стандартного поведения Activity Stack.

Вся теория по сегодняшей теме присутствует на developer.android.com/guide/topics/manifest/activity-element.html, я буду кое-где на неё ссылаться, а мы постараемся разобраться как оно работает на деле и выяснить, в каких ситуациях это можно использовать в реальной жизни.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments6

Жизненный цикл Activity Stack (часть 1)

Reading time4 min
Views24K
Пожалуй, самый популярный вопрос на собеседованиях на Android-разработчика звучит так: «расскажите нам про жизненный цикл Activity». На первый взгляд в этом нет ничего сложного, в каком только блоге об этом ещё не писали, и кандидат тут же начинает рисовать известную блок-схему и по ходу пояснять. Сферический life cycle в вакууме, которым изобилуют все уроки, действительно достаточно прост для понимания, но ведь activity — это только часть некой обобщающей их сущности. Сущность эта называется Activity Stack, и с его жизненным циклом мы сейчас постараемся разобраться.

Жизненный цикл Activity Stack (часть 2)
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments6

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Mobile Application Developer
Senior