Открытый вебинар «Онлайн-интенсив «Упрощаем процесс код ревью с помощью Android Lint»» 19.02.2020 в 20:00 | OTUS >
🔥 Учись выгодно в мае!
Скидка на курсы 15% только до 11.05 →
Выбрать курс
Проходил 19 февраля 2020 года в 20:00

Открытый вебинар Вебинар для Android-разработчиков с опытом работы.
Онлайн-интенсив «Упрощаем процесс код ревью с помощью Android Lint»

Открытый вебинар онлайн

На интенсиве вы:
- узнаете, как при помощи статических анализаторов, а именно Android Lint, упростить и ускорить процесс код ревью.
- разберете, как работает Android Lint, как парсить source файлы, что такое AST, PSI и тп.
- займетесь live-кодингом: напишете кастомные lint проверки на частые ошибки, возникающие при написании кода.
Преподаватель
Антон Казаков

Запись

О курсе

Android Developer. Professional
116 000 ₽
Начало 24 августа
  • Научитесь использовать всю мощь Kotlin для создания современных Android-приложений
  • Научитесь использовать инструменты необходимые для качественной промышленной Android-разработки: Android Architecture, Dagger 2, RxJava, Kotlin coroutines, JUnit, UI Tests, Ui Profiling, Gradle optimizations и др.
  • Создадите свой аналог YouTube, Imgur, CoinMarketCap в рамках разработки индивидуальной проектной работы, которая пополнит ваше портфолио
  • Общение напрямую с преподавателями на лекциях и в Telegram-чате, обсуждение …
Программа курса
Модуль 1
Введение
Модуль 2
Асинхронная работа в Android
Модуль 3
View
Модуль 4
Compose
Модуль 5
Data
Модуль 6
Архитектура
Модуль 7
Kotlin Multiplatform
Модуль 8
Testing
Модуль 9
Build process
Модуль 10
Проектная работа
Введение
Освежим знания по Kotlin stdlib. Поговорим о kotlin coroutines, их внутреннем устройстве и API.
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
Асинхронная работа в Android
В этом модуле поговорим про архитектуру в Android приложениях. Рассмотрим популярные архитектурные паттерны и выявим pros & cons каждого из них. Углубимся в ООП паттерны, особое внимание уделим IOC, в частности Dependency Injection: изучим как работает Dagger 2 и используем его для построение многомодульного приложения. Научимся искать явные признаки плохо спроектированного проекта и общие “запахи кода”, и рефакторить проблемные участки кода.
Android Multithreading
обсудить многопоточность в Android приложениях;
изучить базу о процессах и потоках в Linux, Handler, Looper и отправке сообщений, Main Thread.
RxJava
научиться использовать основные операторы RxJava;
обрабатывать ошибки с помощью операторов RxJava;
разобраться как работать с Backpressure.
Домашние задания: 1
ДЗ
ReactiveCats. - Переведите сетевой запрос с retrofit.Call на RX цепочку. Для этого подключите Retrofit адаптер, поменяйте возвращаемые типы функций

- Поменяйте логику в CatsViewModel.kt с колбеков на RX. Логику обработки успеха/ошибки из коллбека необходимо перенести в терминальные коллбеки RX цепочки. Не забудьте очистить подписки когда ViewModel уничтожается

- Реализуйте функцию otus.homework.reactivecats.LocalCatFactsGenerator#generateCatFact, так, чтобы она возвращала Fact со случайной строкой из массива строк R.array.local_cat_facts обернутую в подходящий стрим(Flowable/Single/Observable и т.п)

- Реализуйте функцию otus.homework.reactivecats.LocalCatFactsGenerator#generateCatFactPeriodically так, чтобы она эмитила Fact со случайной строкой из массива строк R.array.local_cat_facts каждые 2000 миллисекунд. Если вновь заэмиченный Fact совпадает с предыдущим - пропускаем элемент.

- Реализуйте функцию otus.homework.reactivecats.CatsViewModel#getFacts следующим образом: каждые 2 секунды идем в сеть за новым фактом, если сетевой запрос завершился неуспешно, то в качестве фоллбека идем за фактом в уже реализованный otus.homework.reactivecats.LocalCatFactsGenerator#generateCatFact.
Kotlin coroutines
изучить coroutine api, принцип работы корутин, structured concurrency;
рассмотреть кейсы применения корутин в android разработке;
разобраться как корутины устроены внутри, что скрывается за модификатором suspend, что такое CPS и FSM и почему корутины такие легковесные.
Домашние задания: 1
ДЗ
Kotlin coroutines. 1. Перейти с коллбеков на suspend функции и корутины:
- Поменять возвращаемый тип в `CatsService` и добавить модификатор `suspend`
- Переписать логику в презентере с `Callback` на корутины и `suspend` функции
- Реализовать свой скоуп: PresenterScope с `MainDispatcher` и CoroutineName("CatsCoroutine") в качестве элементов контекста
- Добавить обработку исключений через try-catch. В случае `java.net.SocketTimeoutException` показываем Toast с текстом "Не удалось получить ответ от сервером". В остальных случаях логируем исключение в `otus.homework.coroutines.CrashMonitor` и показываем Toast с `exception.message`
- Не забываем отменять Job в `onStop()`
2. Добавить к запросу фактов запрос рандомных картинок с [https://aws.random.cat/meow](https://aws.random.cat/meow):
- На каждый рефреш экрана должен запрашиваться факт + картинка: добавляем сетевой запрос и реализуем логику аналогичную первой задаче. Для загрузки изображений уже подключена библиотека [Picasso](https://github.com/square/picasso)
- В метод `view.populate` передаем 1 аргумент, поэтому необходимо реализовать модель презентейшен слоя в которой будут содержаться необходимые данные для рендеринга(текст и ссылка на картинку)
- Отменятся запросы должны одновременно
3. Реализовать решение на ViewModel:
- Реализовать наследника `ViewModel` и продублировать в нем логику из `CatsPresenter`, с необходимыми изменениями. Используйте `viewModelScope` в качестве скоупа.
- Добавить логирование ошибок через CoroutineExceptionHanlder. Используйте класс CrashMonitor в качестве фейкового CrashMonitor инструмента
- Создать sealed класс `Result`. Унаследовать от него классы `Success<T>`, `Error`. Использовать эти классы как стейт необходимый для рендеринга/отображени ошибки

https://github.com/Otus-Android/CoroutinesHomework
Flow
изучить принцип работы каналов, разобраться в различных размерах буфферов каналов, каналы как аналог `BlockingQueue` для корутин;
рассмотреть кейсы применение каналов в андроид разработке;
изучить принцип работы флоу и задачи которые он решает;
изучить операторы для работы с флоу;
рассмотреть кейсы применение флоу в андроид разработке.
Домашние задания: 1
ДЗ
Flow. ## Перейти с коллбеков на саспенд функции и корутины

1. Сейчас приложение крашится. Поправьте ошибку.
2. Поменяйте реализацию с LiveData на StateFlow
3. В случае если возникнет ошибка в стриме, нужно заэмитить айтем `Result.Error`*

*Создать sealed класс Result. Унаследовать от него классы Success<T>, Error. Использовать эти классы как стейт необходимый для рендеринга/отображени ошибки

### Реализовать функции с использование flow операторов

1. В классе SampleInteractor реализуйте функции task1`-`task4 в соответствии с условиями. Для проверки функций используйте тесты в SampleInteractorTest

https://github.com/Otus-Android/FlowHomework
View
Третий модуль посвящен View и всему что с ними связано. Поговорим о View и ViewGroup которые доступны из коробки, погрузимся в их устройство и сравним быстродействие. Рассмотрим инструменты которые предоставляет Android SDK для рисования/рендеринга своих View. Сделаем наше приложение более отзывчивым используя широкие возможности Animator фреймворка. Научимся использовать инструменты для профилирования чтобы быть уверенными что наши вью попадают в ui rendering frame.
Views
изучить процесс измерения и расположения View на экране;
научиться писать свои кастомные View и ViewGroup;
научиться писать свои кастомные LayoutParams.
Canvas
изучить все наиболее часто используемые инструменты для отрисовки Custom View;
научиться делать обработку касаний и жестов;
научиться анимировать CustomView.
Домашние задания: 1
ДЗ
Custom View. Задание 1. Реализовать кастом View - график Pie Chart, на котором будем визуализировать траты по категориям:

- Обязательно реализуйте метод onMeasure и учтите все возможные MeasureSpecs
- Реализуйте механизм сохранения состояния внутри View
- Предусмотрите как минимум 10 категорий(цветов) на графике
- В качестве данных для визуализации используйте файл payload.json
- Реализуйте механизм обработки клика на сектор - по клику на часть графика должен срабатывать коллбек, в качестве аргумента - категория на которой был клик евент.

Задание 2. Реализуйте еще одну кастомную View - график детализацию категории, чтобы можно было смотреть траты по одной категории в динамике:
По оси Y сумма трат в день, по оси Х дата(шаг по оси Х = 1 дню)

- Обязательно реализуйте метод onMeasure и учтите все возможные MeasureSpecs
- Реализуйте механизм сохранения состояния внутри View
- В качестве данных для визуализации используйте файл payload.json
- Реализовывать масштабирование/скроллинг/обработку тач евентов не нужно

https://github.com/Otus-Android/HomeWork_07
Animations
изучить Animator Framework;
изучить Animated Vector Drawable;
научиться использовать Shapeshifter;
разобраться с TransitionManager и MotionLayout.
RecyclerView
изучить основные компоненты RecyclerView: ViewHolder, ItemDecorator, ItemAnimator, SnapHelper, Adapter и др;
изучить возможность реализации swipe to delete механик;
научится работать с большим количеством ViewType.
Домашние задания: 1
ДЗ
RecyclerView (NEW ДЗ) .
Ui Profiling
изучить инструментарий для профайлинга UI;
научится находить медленные места в работе приложения и оптимизировать их.
Compose
Данный модуль посвящен изучению нового UI фреймворка в андроиде - Compose. Узнаем его особенности и отличия от View фреймворка. Научимся делать приложения на Compose.
Compose. 1 часть
понимать принципы compose: декларативность, фазы, рекомпозиция;
разбираться, как устроен compose внутри (в общих чертах): composer, slot table;
научиться использовать slot api.
Compose. 2 часть
разобраться с Modifiers детальнее, порядок Modifiers;
научиться использовать разные Side Effects;
разобраться, как собрать целое приложение на Compose.
Домашние задания: 1
ДЗ
Compose - 1. Домашнее задание описано в репозитории:

[https://github.com/Otus-Android/ComposeHomework-1](https://github.com/Otus-Android/ComposeHomework-1)
Compose. 3 часть
научится делать анимации в Compose;
научиться делать кастомные Layout и SubComposeLayout;
разобраться с Intrinsic;
разобраться как рисовать на Canvas в Compose.
Compose. 4 часть
делать типы стабильными, а функции skippable;
знать типичные примеры оптимизации;
разбираться в способах оптимизации.
Домашние задания: 1
ДЗ
Compose - 2. Домашнее задание описано в репозитории:

[https://github.com/Otus-Android/ComposeHomework-2](https://github.com/Otus-Android/ComposeHomework-2)
Консультация по ДЗ
получить ответы на вопросы по проекту, ДЗ и по курсу.
Data
Здесь мы поговорим о том как получать данные, обрабатывать их и безопасно хранить. Рассмотрим способы получения данных по сети, хранение в persistent и secure хранилищах.
Network
рассмотреть способы сетевого взаимодействия в Android;
научиться настраивать сетевой слой приложения;
рассмотреть библиотеки Retrofit, OkHttp, Ktor.
Persistent storage
рассмотреть различные способы хранения данных в Android.
Домашние задания: 1
ДЗ
Источники данных. Для выполнения домашней работы необходимо добавить источник данных. Если ваше приложение получает данные по сети - нужно организовать сетевой слой взаимодействия. Если ваше приложение хранит/получает данные из локальной базы данных, то организуйте слой взаимодействия с БД.




Например, для организации сетевого слоя вы можете использовать `Retrofit, OkHttp, Gson, Moshi` и т.п.




Для организации слоя работы с БД можете использовать любую БД/ORM: `Realm, SQLite, ObjectBobx, Room` и т.п.
Securing storage
разобраться как работать с безопасным хранилище секретных данных;
базовые алгоритмы шифрования и их применение в Android.
Домашние задания: 1
ДЗ
Securing storage. Задание 1. Реализуйте безопасное хранение auth token:

- Обязательно реализуйте шифрование полученного токена авторизации AES алгоритмом
- Предусмотрите безопасное хранение ключа
- Обеспечьте поддержку API < 23
- Дополнительно
- Используйте максимально безопастный режим шифрование (не ECB)

Задание 2. Реализуйте вход используя биометрию:

- Релизуйте авторизацию в приложение через BiometricPrompt
- Обеспечьте поддержку STRONG и WEAK биометрию
- Дополнительно
- Добавьте возможность включать или отключать авторизацию через биометрию

Тестовый пользователь
1. Email: [email protected]
2. Пароль: otus




Материаы, которыми можно пользоваться:
https://github.com/vitalyraevsky/otus_security


https://developer.android.com/privacy-and-security/keystore
Архитектура
Clean Architecture
разобраться с концепциями Чистой Архитектуры, Слоистой Архитектуры, Гексагональной Архитектуры, сходствами и различиями между ними;
знать исторические предпосылки к появлению Чистой Архитектуры и по подходам, которые легли в основу Чистой Архитектуры;
знать самые распространенные заблуждения относительно того как работает чистая Архитектура применимо к мобильной разработке;
изучить чистую Архитектуру на примере.
MVC+MVP+MVVM
рассмотреть что такое Presentation паттерны, зачем они нужны, как они живут совместно с концепцией Clean Architecture;
сформировать понимание того в каких условиях и с какой целью эти паттерны появились, какие проблемы они решают, как подойти к решению вопроса о том какой паттерн использовать для своего приложения;
рассмотреть на примеры реализации паттернов MVP и MVVM с разборов различных вариантов их реализации;
разобрать различия между MVP и MVVM и то какие шаги необходимо сделать чтобы превратить MVP в MVVM;
отойти от парадигмы что один экран - это один набор (View)+(Presenter/ViewModel)+(Model), разбираем различные подходы к построению иерархичных паттернов.
MVI
познакомиться с паттерном MVI, с известными фреймворками;
научиться строить экраны на MVI.
Домашние задания: 1
ДЗ
MVx паттерны (NEW ДЗ) .
Dagger2. Часть 1
изучить принципы DI;
разобраться что такое зависимости и как это влияет на наш код;
понять задачи DI.
Dagger2. Часть 2
рассмотреть основные структуры, которые предоставляет Dagger2;
рассмотреть Component Dependencies как механизм построения иерархии модулей;
изучить генерируемый Dagger'ом код;
рассмотреть механизм Assisted Injection.
Hilt
научиться использовать Subcomponents для построения графов компонентов;
рассмотреть Hilt Api и его основные конструкции;
научиться встраивать свои компоненты;
рассмотреть как работает Hilt под капотом.
Домашние задания: 1
ДЗ
Dagger 2 (обновление) . https://github.com/Otus-Android/Dagger2Homework
Multi-module project. 1 часть
обозначить проблемы которые решает многомодульное приложение;
научится проектировать многомодульные приложения с Dagger2 в качестве DI фреймворка;
изучить типы модулей в многомодульном проекте;
изучить способы навигации в многомодульном проекте.
Multi-module project. 2 часть
обозначить проблемы, которые решает многомодульное приложение;
научиться проектировать многомодульные приложения с Dagger2 в качестве DI фреймворка;
рассмотреть типы модулей в многомодульном проекте;
рассмотреть способы навигации в многомодульном проекте.
Консультация по ДЗ
получить ответы на вопросы по проекту, ДЗ и по курсу.
Kotlin Multiplatform
В данном модуле мы научимся писать мультиплатформенные приложения используя два подхода. Во-первых, приложения в которых переиспользуются слои получения и обработки данных, начнем строить их архитектуру, рассмотрим best practices. А также, приложения c общим UI слоем, реализованным на Compose Multiplatform.
Кроссплатформенная бизнес-логика
разработать кроссплатформенный модуль бизнес-логики и интегрировать его с нативными интерфейсами для Android и Web.
Кроссплатформенный view с использованием Compose Multiplatform
создать кроссплатформенный view-слой с использованием Compose Multiplatform и реализовать интерфейсы Kotlin для нативных платформ.
Использование и обзор кроссплатформенных библиотек
изучить и проанализировать использование кроссплатформенных библиотек для разработки сетевых приложений и управления данными с помощью Ktor, SQLDelight и Kodein.
Testing
В данном модуле рассмотрим различные виды тестов. Начнем с основания пирамиды тестирования - unit тестов, плавно перейдем на интеграционные тесты и закончим на вершине - автоматизированными UI тестами которые позволяют облегчить и ускорить ручное тестирование. Поговорим о таких инструментах как JUnit, Mockito, Robolectric, Espresso, UIAutomator и т.д. Подробно разберем на практике нюансы различных видов тестирования, слабые и сильные стороны, их стоимость и процессы написания/выполнения.
Testing. 1 часть
познакомится с различными видами тестов через пирамиду тестирования;
научиться писать unit тесты;
научиться структурировать unit тесты;
познакомиться с популярными фреймворками для написания тестов в Android: JUnit, Mockito;
познакомится с различными видами тестовых дублеров;
рассмотреть best practices по написанию тестов.
Домашние задания: 1
ДЗ
Testing. Юнит тесты и интеграционные тесты.. Книги
{: .no_toc }

- [Книга](https://www.manning.com/books/effective-unit-testing) с best practises по проектированию и написанию unit тестов
- [Книга](http://shop.oreilly.com/product/0636920038597) о том как пиcать тест на Spock. По своему опыту не рекомендую использовать Spock в связке с Robolectric, но если вы пишите не под Android, либо вам удалось избавиться от Robolectric, то советую посмотреть на Spock
- [Новое издание](https://www.manning.com/books/junit-in-action-third-edition) книги о написании тестов с JUnit 5

Статьи
{: .no_toc }

- [Памятка](http://wiki.c2.com/?ArrangeActAssert) по arrange-act-assert
- [Блог](https://testing.googleblog.com) от Google о тестировании. Много крутых постов о том как нужно писать тесты на Java/C++. Что выбрать DAMP или DRY, как правильно декомпозировать assertions и т.п. Советую перечитать все что уже есть в блоге и следить за новыми постами
- [Блог](https://martinfowler.com/testing/) Мартина Фаулера. Куча статей о том какие виды тестов существуют, какие тестовые дублеры и где нужно использовать, паттерны написания тестов и многое другое. Новые статьи почти не выходят, но то что уже написано прочитать нужно обязательно
- [Статья](https://docs.gradle.org/current/userguide/java_testing.html) о том как правильно выполнять тесты если вы используйте Gradle

Видео
{: .no_toc }

- [Крутой доклад](https://www.youtube.com/watch?v=EZ05e7EMOLM) про то как правильно готовить TDD
- [TDD в Android](https://www.youtube.com/watch?v=WW5TL7070xU)
Testing. 2 часть
рассмотреть фреймворк Robolectric;
научиться тестировать RX цепочки;
научиться тестировать саспенд функции и корутины;
научиться как тестировать стэйты во ViewModel;
научиться тестировать методы общения между фрагментами (Fragment Result Api);
научиться тестировать фрагменты из Unit тестов (как создать фрагмент в Unit тесте и соответственно тестировать чтото, например Fragment Resul Api);
научиться использовать Excpresso из Unit тестов.
UI Tests. 1 часть
познакомиться с библиотекой Espresso;
разобраться с основными классами для работы: ViewActions/ViewAssertions/ViewInteractions;
познакомиться с Idling Resource;
научиться писать свои матчеры;
познакомиться с паттерном PageObject;
научиться писать UI тесты на пользовательские сценарии.
UI Tests. 2 часть
познакомиться с паттерном PageObject;
познакомиться с Kaspresso;
познакомиться с UIAutomator.
Консультация по ДЗ
получить ответы на вопросы по проекту, ДЗ и по курсу.
Build process
Этот модуль посвящен инфраструктуре, сборке и деплою приложений. Поговорим о системах сборки, контейнерах, инструментах для CI/CD. Напишем свой pipeline для сборки/тестирования/деплоя приложения.
R8 & Proguard
рассмотреть работу R8, для чего и как работает;
понять этапы работы, для чего используется каждый из них (оптимизация, шринкинг, минификация/обфускация);
научиться писать точные keep рулы.
Gradle
познакомиться с основными сущностями Gradle;
рассмотреть жизненный цикл Gradle проектов;
научиться писать свои таски и плагины.
Домашние задания: 1
ДЗ
Gradle API. В этой домашней работе мы напишем несколько Gradle тасок для публикации приложения в Google Play:

1. Подключите [Google Play Publisher API](https://developers.google.com/android-publisher)
2. Добавьте Extension для конфигурации публикации приложения: выбор трека, процента раскатки, release notes
3. Реализуйте Gradle Task который будет публиковать APK/AAB приложения в соответствии с конфигами
Optimizing Gradle Builds
познакомиться с профайлерами/бенчмарками, использующимися для детального анализа Gradle билдов;
изучить основные способы оптимизации Gradle билдов через настройки AGP/Gradle/JVM и других инструментов;
изучить общие советы и лучшие практики ускорения Gradle билдов.
Статический анализ: Android Lint и Detekt
познакомиться с Android Lint и Detekt;
научиться писать свои правила;
научиться писать тесты на правила.
Домашние задания: 1
ДЗ
Статический анализ с помощью Detekt. **Задание 1**



1. Реализуйте правило, которое найдет запуск корутин через `launch` или `async` в `GlobalScope`.
2. Напишите тесты на ваше правило.




**Задание 2**



1. Реализуйте правило, используя **type resolution**, которое найдет запуск корутины через `launch` или `async` над любыми наследниками `kotlinx.coroutines.CoroutineScope` внутри `suspend` функции.
2. Правило не должно репортить об использовании scope-билдеров внутри suspend функции (`coroutineScope`, `supervisorScope`)
3. Напишите тесты на ваше правило.




### Репозиторий доманшего задания:
[https://github.com/Otus-Android/StaticAnalysisHomework](https://github.com/Otus-Android/StaticAnalysisHomework)
Docker для Android разработки
рассмотреть юзкейсы применения docker контейнеров в android разработке;
рассмотреть архитектуру docker и его основные механизмы;
рассмотреть основные CLI команды docker клиента;
научиться писать свои Dockerfile, собирать из них image и пушить их на DockerHub.
Jenkins
познакомиться с Jenkins и его DSL;
построить пайплайн для проекта;
научиться делегировать сборку проекта jenkins и настраивать триггеры;
поработать с Jenkins в Docker контейнере;
построить инфраструктуру из мастера и слейвов.
Домашние задания: 1
ДЗ
CI/CD. Задание 1.
Начнем с написания Dockerfile, имейдж собранный на его основе, в дальнейшем будет использоваться как билд-агент Jenkins’a для сборки приложения.




Задание 2.
В этом задании нужно реализовать Jenkinsfile который будет выполнять типичный флоу для сборки приложения в зависимости от source ветки.




Задание 3.
Хорошая практика запускать ежедневные ночные билды с https://github.com/gradle/gradle-profiler, чтобы видеть как меняется процесс сборки в динамике и при обнаружении аномалий быстро устранять их.




https://kazakovanton.notion.site/CI-CD-1a5dc5415d3d4bc3a9d13642601709b5
App Monitoring
изучить процесс деплоя приложения в различные системы: Firebase App Distribution, AppCenter;
изучить процесс подписки apk файла;
рассмотреть особенности сборки APK и AAB файлов;
изучить процесс деплоя приложения в Google Play, AppGallery.
Консультация по ДЗ
получить ответы на вопросы по проекту, ДЗ и по курсу.
Проектная работа
Этот модуль посвящен доработке и защите выпускных работ. Работа над проектом начинается с самого первого модуля.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
Домашние задания: 1
ДЗ
Проект. **Функциональность**

1. Вы можете выбрать тему приложения самостоятельно, это может быть клон Кинопоиска, трекер курса валют, todo-лист и т.п.
2. Ограничений по темам нет, но есть обязательные требования по функциональности:
3. В приложении должно быть минимум 3-4 экрана.
4. Добавьте в приложение сетевое взаимодействие. Вы можете использовать открытые API, например, из этого списка: Public APIs, использовать BaaS-сервисы или реализовать собственный бэкенд.
5. Большое внимание уделите дизайну приложения — он должен быть консистентным и аккуратным.

**Архитектура и стек технологий**

1. Проект должен быть реализован по Single Activity Application паттерну, то есть в приложении должна использоваться только одна активити, а остальные экраны реализуются через фрагменты или Compose.
2. Навигацию можно организовать с использованием библиотеки Navigation Component или другой популярной библиотеки.
3. Для презентационного слоя используйте архитектуру MVVM/MVI. Если будете использовать MVI, можете сделать самописный вариант или взять популярную библиотеку (при использовании сторонней библиотеки согласуйте это предварительно с руководителем курса).
4. Сделайте разбивку на слои. Слоистая или Чистая архитектура — выбирайте сами.
5. Желательно использовать Jetpack Compose, а не фрагменты, но это не обязательно.
6. Приложение должно быть многомодульным — декомпозируйте фичи по модулям.
7. Обязательно используйте DI для организации архитектуры. Желательно Dagger2 или Hilt; можно использовать Koin, если будете делать KMP-проект.
8. Для асинхронных операций используйте Kotlin Coroutines.
9. Для сетевого взаимодействия используйте Retrofit/Ktor. Для сериализации/десериализации JSON — Gson, Moshi или Kotlin Serialization.
10. Вы можете сделать проект с поддержкой KMP. Это будет плюсом, но не обязательно.
11. Покройте unit тестами 5 классов. Обязательно должна быть покрыта ViewModel (или её аналог, если используете MVI). Напишите UI тесты для одного пользовательского сценария.
12. Подключите к проекту статический анализатор Detekt.

**Презентация**

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

Преподаватель

Антон Казаков
Руководитель направления Android-разработки в Золотое яблоко
Окончил магистратуру Казанского авиационного института по специальности «Радиотехника и телекоммуникации».

В Android-разработке с 2013 года. Разрабатывал приложения в небольших стартапах и огромных компаниях, работал в «СберТехе», руководил Android-разработкой в компании «Технократия» и «Альфа-Банке».

На текущий момент руководит Android-разработкой в «Золотое яблоко» (goldapple.ru). Оптимизирует процессы разработки и поставки фич, работает над тулингом, чтобы облегчить жизнь разработчикам.

Помимо Android-разработки, интересуется бэкенд-разработкой и DevOps-практиками. Любит решать алгоритмические задачи.
Преподаватель курсов:
Android Developer. Professional
Мир, Труд, Май, Скидки!
-15% на курсы мая! Забрать скидку →