Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
module.exports = {
title: 'Kotlin Multiplatform Mobile',
tagline: 'by IceRock Development',
url: 'https://kmm.icerock.dev',
baseUrl: '/',
url: 'https://alex009.github.io',
baseUrl: '/kmm.icerock.dev/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
organizationName: 'icerockdev', // Usually your GitHub org/user name.
organizationName: 'alex009', // Usually your GitHub org/user name.
projectName: 'kmm.icerock.dev', // Usually your repo name.
// i18n: {
// defaultLocale: 'ru',
Expand Down Expand Up @@ -38,6 +38,13 @@ module.exports = {
label: 'Onboarding',
docsPluginId: 'onboarding',
},
{
type: 'doc',
docId: 'intro',
position: 'left',
label: 'University',
docsPluginId: 'university',
},
// {
// type: 'localeDropdown',
// position: 'right',
Expand Down Expand Up @@ -185,6 +192,17 @@ module.exports = {
editUrl: 'https://github.com/icerockdev/kmm.icerock.dev/tree/docusaurus/',
remarkPlugins: [require('mdx-mermaid')],
},
],
[
'@docusaurus/plugin-content-docs',
{
id: 'university',
path: 'university',
routeBasePath: 'university',
sidebarPath: require.resolve('./sidebars.js'),
editUrl: 'https://github.com/icerockdev/kmm.icerock.dev/tree/docusaurus/',
remarkPlugins: [require('mdx-mermaid')],
},
]
],
};
60 changes: 60 additions & 0 deletions university/0-intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
sidebar_position: 0
---

# IceRock KMM University

## О курсе

Внутренний университет IceRock проводит обучение начинающих специалистов, желающих освоить разработку под мобильные платформы - Android и iOS, с применением технологии Kotlin Multiplatform Mobile.

Материалы курса доступны публично и его можно проходить самостоятельно, однако для студентов университета компании есть следующие преимущества:

1. Постоянная обратная связь - выполненные практические задачи проверяются и дается развернутая обратная связь
1. Консультации с сотрудниками IceRock - студенты курса являются полноценными сотрудниками компании и имеют доступ ко всем каналам коммуникации, что позволяет получать ценный опыт от сотрудников (в офисе, в Slack или на тематических собраниях)
1. Трудоустройство с первого дня обучения - вы сможете посвятить все свое время учебе, не волнуясь о финансовом вопросе

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

После завершения обучения и успешного выполнения выпускного задания студент может выбрать какая платформа будет для него в приоритете и переходит в одну из производственных команд в роли iOS + KMM / Android + KMM разработчика. Уже в производственной команде бывший студент изучит более глубоко выбранную платформу, но уже будет иметь базу по обеим.

## Структура

1. Основы разработки Android приложений
1. Основы разработки iOS приложений
1. Основы разработки Kotlin Multiplatform Mobile
1. Основы мобильной разработки в IceRock
1. Реализация форм ввода данных
1. Передача данных по сети
1. Хранение данных
1. Runtime permissions
1. Push notifications

## Выпускная работа

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

## Длительность

Все тематические блоки курса потребуют ориентировочно 2 месяца, без учета выпускной работы. Объем выпускной работы оценивается в 2 недели.

## График

Обучение происходит в рабочие часы. Рабочий график - пн-пт с 10 до 19.

## Формат коммуникации

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

После первых двух недель можно перейти на удаленную работу, с общением через Slack и Google Meet.

Обратная связь по практическим задачам дается в формате:

1. Комментарии по Code Review в GitLab
1. Документ с списком найденных багов по тестированию приложения
1. Созвон/личная встреча для совместного обсуждения

## Хочу учиться

Заинтересованные в такого рода обучении могут присылать свое резюме на почту training@icerockdev.com, с темой "Обучение в IceRock University".
4 changes: 4 additions & 0 deletions university/1-android-basics/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"position": 1,
"label": "Основы разработки Android приложений"
}
32 changes: 32 additions & 0 deletions university/1-android-basics/android-intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
sidebar_position: 0
---

# Основы Android

Для изучения мобильной разработки с использованием Kotlin Multiplatform Mobile важно изучить основы Android разработки - эти знания и опыт помогут писать общий код для Android и iOS с учетом особенностей обеих платформ.

В основы разработки Android приложений мы включаем:

- Систему сборки - Gradle
- Язык программирования - Kotlin
- Базовые компоненты Android приложения
- `Activity`
- `Service`
- `BroadcastReceiver`
- `ContentProvider`
- `Fragment`
- Верстка UI используя xml layout
- Библиотеки AndroidX и Jetpack от Google
- `RecyclerView`
- `LiveData`
- `ViewModel`
- Жизненный цикл `Application`, `Activity`, `Fragment`, `ViewModel`
- `ViewBinding`
- Библиотека Android Navigation Component от Google
- Библиотека Retrofit от Square
- Библиотека Hilt от Google

:::info
Для тех кому всё перечисленное уже знакомо, использовано на практике и есть уверенное понимание о чем речь - можно пропустить ознакомление с теоретическим блоком и сразу перейти к [практической задаче](practice).
:::
46 changes: 46 additions & 0 deletions university/1-android-basics/app-logic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
sidebar_position: 5
---

# Логика приложения

Помимо пользовательского интерфейса любое мобильное приложение содержит логику работы (еще называют бизнес логикой), например:

- Обращения к серверу для получения данных
- Локальное хранение данных
- Валидация форм ввода
- Обращение к системным API для интеграции - получение фото, видео и подобное
- Алгоритмы расчитывающие некие данные на основе ввода пользователя
- ...

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

Ознакомимся с современными подходами построения логики приложений по [материалам Google](https://developer.android.com/courses/pathways/android-architecture). Обязательно в конце проверь себя пройдя небольшой тест.

## ViewModel

Ознакомиться детальнее с ViewModel и LiveData помогут следующие кодлабы:

- [Android Kotlin Fundamentals: 5.1 ViewModel](https://developer.android.com/codelabs/kotlin-android-training-view-model) - не пропуская Summary и тест в Homework
- [Android Kotlin Fundamentals: LiveData and LiveData observers](https://developer.android.com/codelabs/kotlin-android-training-live-data) - не пропуская Summary и тест в Homework
- [Incorporate Lifecycle-Aware Components](https://developer.android.com/codelabs/android-lifecycles) - для закрепления связей жизненного цикла android компонентов и ViewModel, LiveData

## Retrofit

Практически все приложения выполняют работу с сетью. Основной способ выполнения сетевых запросов в Android это библиотека [Retrofit](https://square.github.io/retrofit/).

CodeLab [Get data from the internet](https://developer.android.com/codelabs/basic-android-kotlin-training-getting-data-internet) даст более детальное представление о библиотеке и как её использовать.

## Coroutines

В CodeLab [Get data from the internet](https://developer.android.com/codelabs/basic-android-kotlin-training-getting-data-internet) для выполнения асинхронной задачи (обращения к серверу) использовались [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines). Это популярная библиотека для выполнения асинхронных и многопоточных задач.

Ознакомимся с библиотекой детальнее используя Hands On [Introduction to Coroutines and Channels](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/).

В дальнейшем (вне текущего курса) для изучения coroutines используй подборку материалов из [раздела Learning](../../learning/libraries/kotlinx/coroutines).

## Dependency Injection

Разные классы приложения должны между собой связываться. Чтобы связанность классов не стала слишком жесткой, что усложнит поддержку кода, используют паттерн Dependency Injection.

Подробнее позволит разобраться статья [Dependency Injection](https://developer.android.com/training/dependency-injection) и CodeLab [Using Hilt in your Android app](https://developer.android.com/codelabs/android-hilt).
81 changes: 81 additions & 0 deletions university/1-android-basics/getting-started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
sidebar_position: 1
---

# Первые шаги

## Build your first app

Первые шаги в разработке Android приложений рекомендуем начать с выполнения инструкций на [developer.android.com](https://developer.android.com) в блоке [Build your first app](https://developer.android.com/training/basics/firstapp).

Блок "Создание вашего первого приложения" научит:
- Как развернуть среду разработки Android приложений `Android Studio`
- Как создать простейший проект
- Как собрать Android приложение и запустить на эмуляторе/устройстве
- Как построить UI используя `ConstraintLayout`
- Как использовать строки локализации из ресурсов
- Как делать переходы между `Activity`

## App fundamentals

После первого созданного приложения (молодец!) нужно глубже погрузиться в теорию об устройстве Android приложений. В этом нам поможет все та же официальная документация [developer.android.com](https://developer.android.com) - идем читать [App fundamentals](https://developer.android.com/guide/components/fundamentals).

Документация расскажет:
- Что является компонентами Android приложения
- За что отвечает `Activity`
- Что такое `Service`
- Какие типы `Service` нам доступны и для чего
- Какие задачи решает `BroadcastReceiver`
- Чем полезен `ContentProvider`
- Как запустить каждый из компонентов Android приложения
- Для чего нужен `ContentResolver`
- Состав и предназначение `AndroidManifest.xml`
- Как управлять требованиями приложения к версии Android
- Что такое ресурсы Android приложения

## App resources

Следующий важный блок Android разработки - работа с ресурсами приложения. Документация также есть, но начнем в этот раз с видео от сообщества - так будет проще понять.

<iframe src="//www.youtube.com/embed/ZKevy76vKcY" frameborder="0" allowfullscreen width="675" height="380"></iframe>
<br/>
<br/>

После просмотра видео можно перейти к документации, но только в раздел [Handle configuration changes](https://developer.android.com/guide/topics/resources/runtime-changes), в котором описана одна из важнейших особенностей Android, которая влияет на разрабокту общего кода - изменение конфигурации и автоматическое пересоздание UI компонентов системой.

Раздел документации [App resources](https://developer.android.com/guide/topics/resources/providing-resources) содержит очень детальное и развернутое описание как работать с ресурсами, каких типов они бывают и для чего нужен каждый из них. Об этом стоит прочитать *в будущем*, на данный момент лучше пропустить.

В результате мы должны узнать:
- Что такое изменение конфигурации, в каких случаях происходит и к чему приводит
- Какие типы ресурсов есть в android приложении
- Как реализуется локализация строк и изображений под разные языки
- Как добавлять векторные и растровые изображения в приложение
- Как сделать разную UI верстку для разных экранов
- Что такое dp и ***dpi
- Что такое `qualifier`
- Что такое `R` класс и как его использовать

## Android Manifest

Файл `AndroidManifest.xml` важный и главный источник информации о приложении для Android OS. Пора ознакомиться с его кратким описанием - [App Manifest Overview](https://developer.android.com/guide/topics/manifest/manifest-intro), а к детальному описанию каждого аттрибута можно будет обратиться тогда, когда он попадется на практике.

Про манифест нужно понять:
- Зачем нужен `AndroidManifest.xml`
- Структура файла
- Обязательные атрибуты
- Как добавлять `Activity`/`Service`/`ContentProvider`/`BroadcastReceiver`
- Как объявлять требуемые приложению разрешения

## Немного практики

В приложении созданном на шаге [Build your first app](#build-your-first-app) нужно:
1. Создать новую `Activity` - `RotatingActivity`
1. На UI `RotatingActivity` расположить 2 надписи с текстом "первая" и "вторая"
1. Сделать переход на эту активити с отдельной иконки на рабочем столе (чтобы стало 2 иконки на рабочем столе)
1. Сделать разную верстку для портретного и ландшафтного режима - в портретном надписи должны быть "первая" сверху и "вторая" снизу, а в ландшафтном - слева и справа соответственно
1. Сделать локализацию строк с переводом на английский
1. Добавить векторное изображение и вывести его на любом экране

## Вспомнить главное

- Официальная документация Android - [developer.android.com](https://developer.android.com)
Loading