Опубликовано

Встречайте: “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin”

Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin

Книга посвящена практическому применению Jetpack Compose — современного декларативного фреймворка для создания пользовательских интерфейсов в Android-приложениях. Показаны основы языка Kotlin, от базовых конструкций до сопрограмм и объектно-ориентированного программирования. Рассматриваются ключевые концепции Compose 1.6, включая построение пользовательских интерфейсов с помощью Composable-функций, управление состоянием, навигация, анимационные эффекты, и архитектура приложений. Отдельное внимание уделено работе с базами данных SQLite и библиотекой Room, биометрической аутентификации, встроенным покупкам, использованию карт Google Maps и публикации приложений в Google Play.
В книге представлены практические примеры и подробные пошаговые инструкции по работе в Android Studio Iguana и использованию возможностей Material Design 3.

Для начинающих и практикующих Android-разработчиков

Практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6, Android Studio Iguana и Material Design 3.

Jetpack Compose — это современный декларативный фреймворк для разработки пользовательских интерфейсов в Android-приложениях, полностью основанный на языке Kotlin. С его помощью вы сможете создавать гибкие, масштабируемые и визуально привлекательные приложения с минимальными усилиями.

Эта книга — практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6Android Studio Iguana и Material Design 3. Подробно рассматриваются ключевые концепции фреймворка, включая компоненты интерфейса, управление состоянием, модификаторы, навигация и анимационные эффекты.

Особое внимание уделено архитектуре проектов и современным подходам к построению пользовательского интерфейса на основе Composable-функций.

Для кого эта книга?

  • Начинающие Android-разработчики
  • Программисты, переходящие на Jetpack Compose
  • Те, кто хочет освоить современные подходы в создании мобильных приложений

Формат обучения:

  • Теория + практика
  • Пошаговые задания с готовым кодом
  • Реальные примеры и лучшие практики

Что внутри книги?

Ключевые темы:

  • Компоненты интерфейса
  • Управление состоянием
  • Модификаторы
  • Навигация
  • Анимации
  • Архитектура приложений и работа с Composable-функциями

Дополнительные технологии:

  • Kotlin (от основ до корутин и ООП)
  • Работа с данными: SQLite, Room
  • Биометрическая аутентификация
  • Интеграция Google Maps
  • Публикация в Google Play

Книгу “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin” можно купить в нашем интенет-магазине.

Глава 1. Начало……………………………………………………………………………………… 22

1.1. Для Kotlin-программистов………………………………………………………………………………………………….. 23

1.2. Для новых Kotlin-программистов………………………………………………………………………………………. 23

1.3. Загрузка примеров кода……………………………………………………………………………………………………… 23

Глава 2. Настройка среды разработки Android Studio…………………………….. 24

2.1. Системные требования……………………………………………………………………………………………………….. 24

2.2. Загрузка пакета Android Studio………………………………………………………………………………………….. 24

2.3. Установка Android Studio…………………………………………………………………………………………………… 25

2.3.1. Установка в Windows……………………………………………………………………………………………….. 25

2.3.2. Установка в macOS………………………………………………………………………………………………….. 25

2.3.3. Установка в Linux…………………………………………………………………………………………………….. 26

2.4. Мастер установки Android Studio……………………………………………………………………………………… 26

2.5. Установка дополнительных пакетов Android SDK………………………………………………………….. 29

2.6. Установка инструментов командной строки Android SDK……………………………………………… 32

2.6.1. Windows 8.1……………………………………………………………………………………………………………….. 33

2.6.2. Windows 10………………………………………………………………………………………………………………… 34

2.6.3. Windows 11………………………………………………………………………………………………………………… 34

2.6.4. Linux………………………………………………………………………………………………………………………….. 34

2.6.5. macOS………………………………………………………………………………………………………………………… 34

2.7. Управлению памятью Android Studio………………………………………………………………………………… 35

2.8. Обновление Android Studio и SDK……………………………………………………………………………………… 36

2.9. Заключение………………………………………………………………………………………………………………………….. 36

Глава 3. Обзор Compose-проекта……………………………………………………………. 37

3.1. О проекте……………………………………………………………………………………………………………………………… 37

3.2. Создание проекта……………………………………………………………………………………………………………….. 37

3.3. Создание активити……………………………………………………………………………………………………………… 39

3.4. Определение параметров проекта и настроек для SDK………………………………………………….. 39

3.5. Включение нового UI-интерфейса в проект Android Studio…………………………………………….. 41

3.6. Предварительный просмотр тестового проекта………………………………………………………………. 42

3.7. Обзор главной активити……………………………………………………………………………………………………… 46

3.8. Предварительный просмотр обновлений…………………………………………………………………………. 50

3.9. Список материалов и версия Compose……………………………………………………………………………… 51

3.10. Заключение……………………………………………………………………………………………………………………….. 52

Глава 4. Пример Compose-проекта…………………………………………………………. 53

4.1. Начало работы……………………………………………………………………………………………………………………. 53

4.2. Удаление кода шаблона…………………………………………………………………………………………………….. 53

4.3. Иерархия компонуемых функций………………………………………………………………………………………. 54

4.4. Добавление компонуемой функции DemoText…………………………………………………………………. 54

4.5. Предварительный просмотр компонуемой функции DemoText……………………………………… 56

4.6. Добавление компонуемой функции DemoSlider……………………………………………………………….. 57

4.7. Добавление компонуемой функции DemoScreen……………………………………………………………… 58

4.8. Предварительный просмотр компонуемой функции DemoScreen………………………………….. 60

4.9. Настройка параметров предварительного просмотра……………………………………………………. 61

4.10. Тестирование в интерактивном режиме………………………………………………………………………….. 62

4.11. Завершение проекта…………………………………………………………………………………………………………. 62

4.12. Заключение……………………………………………………………………………………………………………………….. 63

Глава 5. Создание виртуального Android-устройства в Android Studio……. 64

5.1. О виртуальных устройствах Android………………………………………………………………………………… 64

5.2. Запуск эмулятора……………………………………………………………………………………………………………….. 66

5.3. Запуск приложения в AVD…………………………………………………………………………………………………. 68

5.4. Обновления в реальном времени с помощью Live Edit……………………………………………………. 69

5.5. Запуск на нескольких устройствах…………………………………………………………………………………… 71

5.6. Остановка работающего приложения………………………………………………………………………………. 72

5.7. Поддержка темной темы…………………………………………………………………………………………………….. 73

5.8. Запуск эмулятора в отдельном окне…………………………………………………………………………………. 74

5.9. Отключение рамки устройства………………………………………………………………………………………….. 76

5.10. Заключение……………………………………………………………………………………………………………………….. 78

Глава 6. Использование и настройка эмулятора для AVD в Android Studio 79

6.1. Среда эмулятора…………………………………………………………………………………………………………………. 79

6.2. Панель инструментов эмулятора………………………………………………………………………………………. 80

6.3. Работа в режиме масштабирования………………………………………………………………………………….. 81

6.4. Изменение размера окна эмулятора………………………………………………………………………………….. 82

6.5. Расширенные возможности управления…………………………………………………………………………… 82

6.5.1. Location (местоположение)……………………………………………………………………………………… 83

6.5.2. Displays (дисплеи)…………………………………………………………………………………………………….. 83

6.5.3. Cellular (сотовая связь)……………………………………………………………………………………………… 83

6.5.4. Battery (аккумулятор)………………………………………………………………………………………………. 83

6.5.5. Camera (камера)……………………………………………………………………………………………………….. 83

6.5.6. Phone (телефон)………………………………………………………………………………………………………… 83

6.5.7. Directional Pad (навигационная панель)…………………………………………………………………. 84

6.5.8. Microphone (микрофон)……………………………………………………………………………………………. 84

6.5.9. Fingerprint (отпечаток пальца)…………………………………………………………………………………. 84

6.5.10. Virtual Sensors (виртуальные датчики)…………………………………………………………………. 84

6.5.11. Snapshots (снимки)………………………………………………………………………………………………….. 84

6.5.12. Record and Playback (запись и воспроизведение)………………………………………………… 84

6.5.13. Google Play………………………………………………………………………………………………………………. 84

6.5.14. Settings (настройки)………………………………………………………………………………………………… 85

6.5.15. Help (помощь)…………………………………………………………………………………………………………. 85

6.6. Работа со снимками……………………………………………………………………………………………………………. 85

6.7. Настройка эмуляции отпечатков пальцев………………………………………………………………………… 85

6.8. Эмулятор в режиме окна инструментов……………………………………………………………………………. 88

6.9. Создание эмулятора с изменяемым размером………………………………………………………………….. 88

6.10. Заключение……………………………………………………………………………………………………………………….. 89

Глава 7. Обзор пользовательского интерфейса Android Studio……………….. 90

7.1. Экран приветствия………………………………………………………………………………………………………………. 90

7.2. Строка меню………………………………………………………………………………………………………………………… 91

7.3. Главное окно……………………………………………………………………………………………………………………….. 92

7.4. Окна инструментов……………………………………………………………………………………………………………… 94

7.5. Меню окон инструментов…………………………………………………………………………………………………… 97

7.6. Сочетания клавиш………………………………………………………………………………………………………………. 98

7.7. Навигация по Switcher и Recent Files…………………………………………………………………………………. 98

7.8. Изменение темы Android Studio……………………………………………………………………………………….. 100

7.9. Заключение……………………………………………………………………………………………………………………….. 101

Глава 8. Тестирование приложений на физическом Android-устройстве. 102

8.1. Обзор Android Debug Bridge (ADB)………………………………………………………………………………….. 102

8.2. Включение отладки ADB по USB на устройствах Android…………………………………………… 102

8.2.1. Конфигурация ADB на macOS………………………………………………………………………………. 104

8.2.2. Конфигурация ADB на Windows…………………………………………………………………………… 104

8.2.3. Конфигурация ADB на Linux………………………………………………………………………………… 105

8.3. Устранение проблем с USB-подключением……………………………………………………………………. 106

8.4. Включение беспроводной отладки на устройствах Android………………………………………… 106

8.5. Тестирование соединения adb…………………………………………………………………………………………. 109

8.6. Зеркалирование устройств………………………………………………………………………………………………. 110

8.7. Заключение……………………………………………………………………………………………………………………….. 110

Глава 9. Основы редактора кода Android Studio…………………………………… 111

9.1. Редактор кода Android Studio…………………………………………………………………………………………… 111

9.2. Разделение окна редактора……………………………………………………………………………………………… 114

9.3. Автозавершение кода……………………………………………………………………………………………………….. 115

9.4. Автозавершение операторов……………………………………………………………………………………………. 117

9.5. Информация о параметрах………………………………………………………………………………………………. 117

9.6. Подсказки имен параметров…………………………………………………………………………………………….. 118

9.7. Генерация кода…………………………………………………………………………………………………………………. 118

9.8. Сокрытие кода…………………………………………………………………………………………………………………… 119

9.9. Быстрый поиск документации…………………………………………………………………………………………. 121

9.10. Переформатирование кода…………………………………………………………………………………………….. 121

9.11. Поиск примера кода……………………………………………………………………………………………………….. 123

9.12. Живые шаблоны……………………………………………………………………………………………………………… 123

9.13. Заключение……………………………………………………………………………………………………………………… 124

Глава 10. Обзор архитектуры Android………………………………………………….. 125

10.1. Программный стек Android…………………………………………………………………………………………….. 125

10.2. Ядро Linux……………………………………………………………………………………………………………………….. 126

10.3. Слой аппаратной абстракции……………………………………………………………………………………….. 126

10.4. Android Runtime — ART…………………………………………………………………………………………………. 126

10.5. Библиотеки Android………………………………………………………………………………………………………… 127

10.5.1. Библиотеки C/C++………………………………………………………………………………………………. 128

10.6. Фреймворк приложений…………………………………………………………………………………………………. 128

10.7. Приложения…………………………………………………………………………………………………………………….. 129

10.8. Заключение……………………………………………………………………………………………………………………… 129

Глава 11. Введение в Kotlin………………………………………………………………….. 130

11.1. Что такое Kotlin?……………………………………………………………………………………………………………… 130

11.2. Kotlin и Java…………………………………………………………………………………………………………………….. 130

11.3. Преобразование из Java в Kotlin……………………………………………………………………………………. 131

11.4. Kotlin и Android Studio…………………………………………………………………………………………………….. 131

11.5. Эксперименты с Kotlin……………………………………………………………………………………………………. 131

11.6. Точки с запятой в Kotlin………………………………………………………………………………………………….. 132

11.7. Заключение……………………………………………………………………………………………………………………… 133

Глава 12. Типы данных и переменные в Kotlin…………………………………….. 134

12.1. Типы данных Kotlin………………………………………………………………………………………………………… 134

12.1.1. Целочисленные типы данных……………………………………………………………………………. 135

12.1.2. Типы данных с плавающей точкой…………………………………………………………………… 135

12.1.3. Тип данных Boolean…………………………………………………………………………………………… 135

12.1.4. Символьный тип данных……………………………………………………………………………………. 136

12.1.5. Тип данных String……………………………………………………………………………………………….. 136

12.1.6. Экранированные последовательности…………………………………………………………….. 137

12.2. Изменяемые переменные………………………………………………………………………………………………… 137

12.3. Неизменяемые переменные……………………………………………………………………………………………. 138

12.4. Объявление изменяемых и неизменяемых переменных……………………………………………….. 138

12.5. Типы данных являются объектами……………………………………………………………………………….. 139

12.6. Аннотации типов и вывод типов……………………………………………………………………………………. 139

12.7. Nullable-типы…………………………………………………………………………………………………………………… 140

12.8. Оператор безопасного вызова……………………………………………………………………………………….. 141

12.9. Ненулевые утверждения………………………………………………………………………………………………… 142

12.10. Nullable-типы и функция let………………………………………………………………………………………….. 142

12.11. Поздняя инициализация (lateinit)…………………………………………………………………………………. 144

12.12. Оператор Элвиса………………………………………………………………………………………………………….. 144

12.13. Приведение типов и проверка типов…………………………………………………………………………… 145

12.14. Заключение……………………………………………………………………………………………………………………. 145

Глава 13. Операторы и выражения в Kotlin………………………………………….. 146

13.1. Синтаксис выражений в Kotlin………………………………………………………………………………………. 146

13.2. Базовый оператор присваивания………………………………………………………………………………….. 146

13.3. Арифметические операторы в Kotlin…………………………………………………………………………….. 147

13.4. Расширенные операторы присваивания………………………………………………………………………. 147

13.5. Операторы инкремента и декремента…………………………………………………………………………… 148

13.6. Операторы равенства…………………………………………………………………………………………………….. 148

13.7. Булевы логические операторы………………………………………………………………………………………. 149

13.8. Оператор диапазона………………………………………………………………………………………………………. 150

13.9. Поразрядные операторы………………………………………………………………………………………………… 150

13.9.1. Поразрядная инверсия……………………………………………………………………………………….. 151

13.9.2. Поразрядное «И»………………………………………………………………………………………………… 151

13.9.3. Поразрядное «ИЛИ»…………………………………………………………………………………………… 151

13.9.4. Побитовое исключающее «ИЛИ»……………………………………………………………………… 152

13.9.5. Поразрядный сдвиг влево………………………………………………………………………………….. 152

13.9.6. Поразрядный сдвиг вправо………………………………………………………………………………… 153

13.10. Заключение……………………………………………………………………………………………………………………. 153

Глава 14. Управление потоком в Kotlin………………………………………………… 154

14.1. Циклический поток управления…………………………………………………………………………………….. 154

14.1.1. Оператор for-in в Kotlin………………………………………………………………………………………. 154

14.1.2. Цикл while……………………………………………………………………………………………………………. 156

14.1.3. Цикл do… while…………………………………………………………………………………………………….. 156

14.1.4. Выход из циклов…………………………………………………………………………………………………. 157

14.1.5. Оператор continue………………………………………………………………………………………………. 157

14.1.6. Метки break и continue……………………………………………………………………………………….. 158

14.2. Условный поток управления………………………………………………………………………………………….. 159

14.2.1. Выражения if………………………………………………………………………………………………………. 159

14.2.2. Выражения if… else……………………………………………………………………………………………… 160

14.2.3. Выражения if… else if………………………………………………………………………………………….. 160

14.2.4. Оператор when……………………………………………………………………………………………………. 161

14.3. Заключение……………………………………………………………………………………………………………………… 161

Глава 15. Обзор функций и лямбда-выражений в Kotlin………………………. 162

15.1. Что такое функция?…………………………………………………………………………………………………………. 162

15.2. Как объявить функцию Kotlin………………………………………………………………………………………… 162

15.3. Вызов функции Kotlin……………………………………………………………………………………………………… 163

15.4. Функции с одним выражением………………………………………………………………………………………. 163

15.5. Локальные функции………………………………………………………………………………………………………… 164

15.6. Обработка возвращаемых значений…………………………………………………………………………….. 164

15.7. Объявление параметров функции по умолчанию………………………………………………………… 164

15.8. Переменное число параметров функции………………………………………………………………………. 165

15.9. Лямбда-выражения…………………………………………………………………………………………………………. 166

15.10. Функции высшего порядка…………………………………………………………………………………………… 167

15.11. Заключение……………………………………………………………………………………………………………………. 168

Глава 16. Основы объектно-ориентированного программирования
в Kotlin…………………………………………………………………………………………………. 169

16.1. Что такое объект?……………………………………………………………………………………………………………. 169

16.2. Что такое класс?……………………………………………………………………………………………………………… 169

16.3. Объявление класса в Kotlin…………………………………………………………………………………………….. 169

16.4. Добавление свойств в класс…………………………………………………………………………………………… 170

16.5. Определение методов……………………………………………………………………………………………………… 170

16.6. Объявление и инициализация экземпляра класса……………………………………………………….. 171

16.7. Главные и вторичные конструкторы…………………………………………………………………………….. 171

16.8. Блоки инициализаторов…………………………………………………………………………………………………. 173

16.9. Вызов методов и доступ к свойствам……………………………………………………………………………. 174

16.10. Пользовательские аксессоры………………………………………………………………………………………. 174

16.11. Вложенные и внутренние классы………………………………………………………………………………… 175

16.12. Объекты-компаньоны…………………………………………………………………………………………………… 176

16.13. Заключение……………………………………………………………………………………………………………………. 178

Глава 17. Введение в наследование и подклассы в Kotlin…………………….. 179

17.1. Наследование, классы и подклассы……………………………………………………………………………… 179

17.2. Синтаксис подклассов……………………………………………………………………………………………………. 179

17.3. Пример наследования в Kotlin……………………………………………………………………………………….. 181

17.4. Расширение функционала подкласса…………………………………………………………………………… 182

17.5. Переопределение унаследованных методов………………………………………………………………… 182

17.6. Добавление пользовательского вторичного конструктора………………………………………… 184

17.7. Использование класса SavingsAccount…………………………………………………………………………. 184

17.8. Заключение……………………………………………………………………………………………………………………… 185

Глава 18. Обзор Compose……………………………………………………………………… 186

18.1. Разработка до Compose…………………………………………………………………………………………………. 186

18.2. Декларативный синтаксис Compose…………………………………………………………………………….. 187

18.3. Compose, управляемый данными………………………………………………………………………………….. 187

18.4. Заключение……………………………………………………………………………………………………………………… 188

Глава 19. Руководство по каталогам версий Gradle……………………………… 189

19.1. Зависимости библиотек и плагинов………………………………………………………………………………. 189

19.2. Файл сборки пакета в Gradle………………………………………………………………………………………….. 189

19.3. Файлы сборки модуля в Gradle………………………………………………………………………………………. 190

19.4. Файл version catalog………………………………………………………………………………………………………… 190

19.5. Добавление зависимостей……………………………………………………………………………………………… 192

19.6. Обновления библиотек…………………………………………………………………………………………………… 193

19.7. Заключение……………………………………………………………………………………………………………………… 193

Глава 20. Обзор компонуемых функций………………………………………………. 194

20.1. Что такое компонуемая функция?…………………………………………………………………………………. 194

20.2. Компонуемые функции с сохранением и без сохранения состояния…………………………. 194

20.3. Синтаксис компонуемой функции…………………………………………………………………………………. 195

20.4. Компонуемые функции Foundation и Material……………………………………………………………… 197

20.5. Заключение……………………………………………………………………………………………………………………… 199

Глава 21. Обзор состояния и рекомпозиции в Compose………………………… 200

21.1. Основы состояния…………………………………………………………………………………………………………… 200

21.2. Знакомство с рекомпозицией…………………………………………………………………………………………. 200

21.3. Создание проекта StateExample……………………………………………………………………………………. 201

21.4. Объявление состояния в компонуемой функции………………………………………………………….. 201

21.5. Однонаправленный поток данных………………………………………………………………………………… 205

21.6. Подъем состояния…………………………………………………………………………………………………………… 207

21.7. Сохранение состояния через изменения конфигурации……………………………………………… 210

21.8. Заключение……………………………………………………………………………………………………………………… 211

Глава 22. Введение в Composition Local………………………………………………… 213

22.1. Понимание CompositionLocal………………………………………………………………………………………… 213

22.2. Использование CompositionLocal………………………………………………………………………………….. 215

22.3. Создание проекта CompLocalDemo……………………………………………………………………………… 215

22.4. Разработка макета………………………………………………………………………………………………………….. 216

22.5. Добавление состояния CompositionLocal…………………………………………………………………….. 217

22.6. Доступ к состоянию CompositionLocal…………………………………………………………………………. 218

22.7. Тестирование дизайна……………………………………………………………………………………………………. 218

22.8. Заключение……………………………………………………………………………………………………………………… 220

Глава 23. Обзор API-слотов в Compose…………………………………………………. 221

23.1. Понимание API-слотов…………………………………………………………………………………………………… 221

23.2. Объявление API-слота……………………………………………………………………………………………………. 222

23.3. Вызов компонуемых API-слотов……………………………………………………………………………………. 223

23.4. Заключение……………………………………………………………………………………………………………………… 224

Глава 24. Пособие по API-слотам в Compose………………………………………… 225

24.1. О проекте…………………………………………………………………………………………………………………………. 225

24.2. Создание проекта SlotApiDemo…………………………………………………………………………………….. 225

24.3. Подготовка файла для класса MainActivity…………………………………………………………………. 225

24.4. Создание компонуемой функции MainScreen………………………………………………………………. 226

24.5. Добавление компонуемой функции ScreenContent………………………………………………………. 227

24.6. Создание компонуемой функции Checkbox…………………………………………………………………. 228

24.7. Реализация API-слотов в ScreenContent……………………………………………………………………….. 229

24.8. Добавление ресурса рисования изображения……………………………………………………………… 231

24.9. Кодирование компонуемой функции TitleImage………………………………………………………….. 233

24.10. Заполнение компонуемой функции MainScreen…………………………………………………………. 233

24.11. Предварительный просмотр проекта………………………………………………………………………….. 235

24.12. Заключение……………………………………………………………………………………………………………………. 237

Глава 25. Использование модификаторов в Compose……………………………. 238

25.1. Обзор модификаторов…………………………………………………………………………………………………….. 238

25.2. Создание проекта ModifierDemo…………………………………………………………………………………… 239

25.3. Создание модификатора………………………………………………………………………………………………… 240

25.4. Порядок модификаторов………………………………………………………………………………………………… 241

25.5. Добавление поддержки модификаторов в компонуемую функцию…………………………… 242

25.6. Общие встроенные модификаторы……………………………………………………………………………….. 246

25.7. Объединение модификаторов………………………………………………………………………………………… 246

25.8. Заключение……………………………………………………………………………………………………………………… 247

Глава 26. Аннотированные строки и стили инструмента Brush……………. 248

26.1. Что такое аннотированные строки?……………………………………………………………………………… 248

26.2. Использование аннотированных строк………………………………………………………………………… 248

26.3. Стилизация текста с помощью инструмента Brush……………………………………………………… 249

26.4. Создание проекта для демонстрации……………………………………………………………………………. 250

26.5. Пример аннотированной строки SpanStyle………………………………………………………………….. 250

26.6. Пример аннотированной строки ParagraphStyle………………………………………………………….. 252

26.7. Пример стиля Brush………………………………………………………………………………………………………… 254

26.8. Заключение……………………………………………………………………………………………………………………… 256

Глава 27. Создание макетов с помощью компонуемых функций Row и Column   257

27.1. Создание проекта RowColDemo……………………………………………………………………………………. 257

27.2. Компонуемая функция Row……………………………………………………………………………………………. 258

27.3. Компонуемая функция Column……………………………………………………………………………………… 259

27.4. Объединение компонуемых функций Row и Column…………………………………………………… 259

27.5. Выравнивание макета…………………………………………………………………………………………………….. 260

27.6. Позиционирование макета…………………………………………………………………………………………….. 263

27.7. Интервал между расположениями макета……………………………………………………………………. 265

27.8. Модификаторы области действия для компонентов Row и Column………………………….. 266

27.9. Веса модификаторов области действия……………………………………………………………………….. 270

27.10. Заключение……………………………………………………………………………………………………………………. 271

Глава 28. Макеты компонента Box в Compose……………………………………… 272

28.1. Введение в компонуемую функцию Box……………………………………………………………………….. 272

28.2. Создание проекта BoxLayout………………………………………………………………………………………… 272

28.3. Добавление компонуемой функции TextCell………………………………………………………………… 273

28.4. Добавление макета Box…………………………………………………………………………………………………. 273

28.5. Выравнивание в Box………………………………………………………………………………………………………. 274

28.6. Модификаторы области действия BoxScope……………………………………………………………….. 276

28.7. Использование модификатора clip………………………………………………………………………………… 277

28.8. Заключение……………………………………………………………………………………………………………………… 278

Глава 29. Введение в FlowRow и FlowColumn……………………………………….. 279

29.1. Компонуемые функции FlowColumn и FlowRow………………………………………………………….. 279

29.2. Максимальное количество элементов………………………………………………………………………….. 280

29.3. Работа с расположением главной оси………………………………………………………………………….. 281

29.4. Понимание поперечного расположения по осям…………………………………………………………. 282

29.5. Выравнивание элементов………………………………………………………………………………………………. 282

29.6. Управление размером элемента……………………………………………………………………………………. 283

29.7. Заключение……………………………………………………………………………………………………………………… 284

Глава 30. Руководство по FlowRow и FlowColumn………………………………… 285

30.1. Создание проекта FlowLayoutDemo……………………………………………………………………………… 285

30.2. Генерация случайных значений для высоты и цвета………………………………………………….. 286

30.3. Добавление компонуемой функции Box……………………………………………………………………….. 287

30.4. Изменение расположения макета Flow…………………………………………………………………………. 288

30.5. Изменение выравнивания элементов…………………………………………………………………………….. 289

30.6. Переключение на FlowColumn………………………………………………………………………………………. 290

30.7. Использование перекрестного расположения……………………………………………………………… 291

30.8. Добавление весов для элементов…………………………………………………………………………………… 292

30.9. Заключение……………………………………………………………………………………………………………………… 293

Глава 31. Пользовательские модификаторы макета…………………………….. 294

31.1. Основы компоновки макета в Compose………………………………………………………………………… 294

31.2. Пользовательские макеты………………………………………………………………………………………………. 295

31.3. Создание проекта LayoutModifier…………………………………………………………………………………. 295

31.4. Добавление компонуемой функции ColorBox………………………………………………………………. 295

31.5. Создание пользовательского модификатора макета…………………………………………………… 296

31.6. Понимание позиции по умолчанию………………………………………………………………………………. 297

31.7. Завершение модификатора макета……………………………………………………………………………….. 297

31.8. Использование пользовательского модификатора……………………………………………………… 299

31.9. Работа с линиями выравнивания…………………………………………………………………………………… 299

31.10. Работа с базовыми линиями………………………………………………………………………………………… 302

31.11. Заключение……………………………………………………………………………………………………………………. 303

Глава 32. Создание пользовательских макетов…………………………………….. 304

32.1. Обзор пользовательских макетов………………………………………………………………………………….. 304

32.2. Синтаксис пользовательского макета…………………………………………………………………………… 304

32.3. Использование пользовательского макета…………………………………………………………………… 306

32.4. Создание проекта CustomLayout………………………………………………………………………………….. 306

32.5. Создание компонуемой функции CascadeLayout………………………………………………………… 307

32.6. Использование компонуемой функции CascadeLayout………………………………………………. 309

32.7. Заключение……………………………………………………………………………………………………………………… 310

Глава 33. Руководство по ConstraintLayout в Compose…………………………. 311

33.1. Введение в ConstraintLayout………………………………………………………………………………………….. 311

33.2. Как работает ConstraintLayout……………………………………………………………………………………… 311

33.2.1. Ограничения……………………………………………………………………………………………………….. 312

33.2.2. Поля……………………………………………………………………………………………………………………… 312

33.2.3. Противоположные ограничения……………………………………………………………………….. 313

33.2.4. Смещение ограничений……………………………………………………………………………………… 313

33.2.5. Цепочки……………………………………………………………………………………………………………….. 314

33.2.6. Стили цепочки…………………………………………………………………………………………………….. 315

33.3. Настройка размеров……………………………………………………………………………………………………….. 316

33.4. Направляющие линии…………………………………………………………………………………………………….. 317

33.5. Барьеры……………………………………………………………………………………………………………………………. 317

33.6. Заключение……………………………………………………………………………………………………………………… 319

Глава 34. Работа с ConstraintLayout в Compose…………………………………….. 320

34.1. Вызов ConstraintLayout………………………………………………………………………………………………….. 320

34.2. Генерация ссылок…………………………………………………………………………………………………………… 320

34.3. Назначение ссылки на компонуемую функцию…………………………………………………………… 321

34.4. Добавление ограничений……………………………………………………………………………………………….. 321

34.5. Создание проекта ConstraintLayout……………………………………………………………………………… 322

34.6. Добавление библиотеки ConstraintLayout……………………………………………………………………. 322

34.7. Добавление пользовательской компонуемой функции button……………………………………. 323

34.8. Базовые ограничения……………………………………………………………………………………………………… 324

34.9. Противоположные ограничения……………………………………………………………………………………. 325

34.10. Смещение ограничений………………………………………………………………………………………………… 327

34.11. Ограничения полями…………………………………………………………………………………………………….. 327

34.12. Важность противоположных ограничений и смещений…………………………………………… 329

34.13. Создание цепочек…………………………………………………………………………………………………………. 332

34.14. Работа с направляющими линиями…………………………………………………………………………….. 333

34.15. Работа с барьерами………………………………………………………………………………………………………. 334

34.16. Наборы ограничений……………………………………………………………………………………………………. 338

34.17. Заключение……………………………………………………………………………………………………………………. 340

Глава 35. Работа с IntrinsicSize в Compose…………………………………………….. 341

35.1. Внутренние измерения……………………………………………………………………………………………………. 341

35.2. Измерение максимального и минимального внутреннего размера……………………………. 342

35.3. О проекте…………………………………………………………………………………………………………………………. 343

35.4. Создание проекта IntrinsicSizeDemo……………………………………………………………………………… 343

35.5. Создание пользовательского текстового поля…………………………………………………………….. 344

35.6. Добавление компонентов Text и Box……………………………………………………………………………. 344

35.7. Добавление столбца верхнего уровня………………………………………………………………………….. 345

35.8. Тестирование проекта……………………………………………………………………………………………………. 346

35.9. Применение измерений IntrinsicSize.Max……………………………………………………………………… 346

35.10. Применение измерений IntrinsicSize.Min…………………………………………………………………….. 347

35.11. Заключение……………………………………………………………………………………………………………………. 347

Глава 36. Корутины и LaunchedEffects в Jetpack Compose…………………….. 348

36.1. Что такое корутины?………………………………………………………………………………………………………. 348

36.2. Потоки против корутинов………………………………………………………………………………………………. 349

36.3. Область действия корутинов…………………………………………………………………………………………. 349

36.4. Функции приостановки…………………………………………………………………………………………………… 350

36.5. Диспетчеры корутинов…………………………………………………………………………………………………… 350

36.6. Конструкторы корутинов………………………………………………………………………………………………. 351

36.7. Job…………………………………………………………………………………………………………………………………….. 352

36.8. Приостановка и возобновление корутинов………………………………………………………………….. 352

36.9. Канал связи для корутинов……………………………………………………………………………………………. 354

36.10. Понимание побочных эффектов………………………………………………………………………………….. 354

36.11. Заключение……………………………………………………………………………………………………………………. 356

Глава 37. Обзор компонуемых функций List и Grid в Compose…………….. 357

37.1. Стандартные и ленивые списки…………………………………………………………………………………….. 357

37.2. Работа со списками Column и Row……………………………………………………………………………….. 358

37.3. Создание ленивых списков…………………………………………………………………………………………….. 358

37.4. Включение прокрутки с помощью ScrollState………………………………………………………………. 359

37.5. Программная прокрутка………………………………………………………………………………………………… 360

37.6. Липкие заголовки……………………………………………………………………………………………………………. 362

37.7. Создание ленивой сетки…………………………………………………………………………………………………. 364

37.8. Заключение……………………………………………………………………………………………………………………… 366

Глава 38. Руководство по спискам на основе Row и Column………………… 367

38.1. Создание проекта ListDemo…………………………………………………………………………………………… 367

38.2. Создание списка на основе Column………………………………………………………………………………. 367

38.3. Включение прокрутки списка………………………………………………………………………………………… 369

38.4. Ручная прокрутка……………………………………………………………………………………………………………. 370

38.5. Пример списка на основе Row……………………………………………………………………………………….. 372

38.6. Заключение……………………………………………………………………………………………………………………… 373

Глава 39. Руководство по ленивым спискам в Compose……………………….. 374

39.1. Создание проекта LazyListDemo…………………………………………………………………………………… 374

39.2. Добавление данных списка в проект…………………………………………………………………………….. 374

39.3. Чтение данных XML……………………………………………………………………………………………………….. 376

39.4. Обработка загрузки изображений…………………………………………………………………………………. 377

39.5. Проектирование компонуемой функции для элементов списка…………………………………. 380

39.6. Создание ленивого списка……………………………………………………………………………………………… 381

39.7. Тестирование проекта……………………………………………………………………………………………………. 382

39.8. Делаем элементы списка интерактивными…………………………………………………………………… 383

39.9. Заключение……………………………………………………………………………………………………………………… 385

Глава 40. Липкие заголовки и обнаружение прокрутки в ленивых списках 386

40.1. Группировка данных в элементах списка……………………………………………………………………. 386

40.2. Отображение заголовков и элементов………………………………………………………………………….. 386

40.3. Добавление липких заголовков……………………………………………………………………………………… 387

40.4. Реакция на изменение позиции прокрутки……………………………………………………………………. 389

40.5. Добавление кнопки прокрутки………………………………………………………………………………………. 390

40.6. Тестирование готового приложения……………………………………………………………………………… 392

40.7. Заключение……………………………………………………………………………………………………………………… 392

Глава 41. Руководство по ленивой неравномерной сетке в Compose…….. 393

41.1. Ленивые неравномерные сетки……………………………………………………………………………………… 393

41.2. Создание проекта StaggeredGridDemo………………………………………………………………………….. 395

41.3. Добавление компонуемой функции Box……………………………………………………………………….. 395

41.4. Генерация случайных значений высоты и цвета…………………………………………………………. 396

41.5. Создание неравномерного списка…………………………………………………………………………………. 397

41.6. Тестирование проекта……………………………………………………………………………………………………. 398

41.7. Переключение на горизонтальную неравномерную сетку…………………………………………. 398

41.8. Заключение……………………………………………………………………………………………………………………… 400

Глава 42. VerticalPager и HorizontalPager в Compose……………………………. 401

42.1. Компонуемая функция Pager………………………………………………………………………………………….. 401

42.2. Работа с состоянием пейджера……………………………………………………………………………………… 403

42.3. О проекте PagerDemo……………………………………………………………………………………………………… 404

42.4. Создание проекта PagerDemo………………………………………………………………………………………… 404

42.5. Добавление изображений с обложками книг……………………………………………………………….. 404

42.6. Добавление HorizontalPager…………………………………………………………………………………………… 405

42.7. Создание содержимого страницы…………………………………………………………………………………. 406

42.8. Тестирование пейджера…………………………………………………………………………………………………. 407

42.9. Добавление кнопок со стрелками………………………………………………………………………………….. 408

42.10. Заключение……………………………………………………………………………………………………………………. 411

Глава 43. Анимация в Compose…………………………………………………………….. 412

43.1. Создание проекта AnimateVisibility………………………………………………………………………………. 412

43.2. Анимация видимости………………………………………………………………………………………………………. 413

43.3. Определение анимаций входа и выхода………………………………………………………………………. 416

43.4. Спецификации и плавность анимации………………………………………………………………………….. 417

43.5. Повтор анимации……………………………………………………………………………………………………………. 419

43.6. Разные анимации для разных дочерних элементов…………………………………………………….. 419

43.7. Автозапуск анимации…………………………………………………………………………………………………….. 421

43.8. Реализация кроссфейдинга…………………………………………………………………………………………….. 422

43.9. Заключение……………………………………………………………………………………………………………………… 423

Глава 44. Анимация, основанная на состоянии……………………………………. 424

44.1. Понимание анимации, управляемой состоянием…………………………………………………………. 424

44.2. Знакомство с функциями «анимация как состояние»…………………………………………………… 424

44.3. Создание проекта AnimateState…………………………………………………………………………………….. 425

44.4. Анимация вращения с помощью animateFloatAsState…………………………………………………. 426

44.5. Анимация изменения цвета с помощью animateColorAsState…………………………………….. 429

44.6. Анимация движения с помощью animateDpAsState…………………………………………………….. 432

44.7. Добавление эффектов пружины…………………………………………………………………………………….. 435

44.8. Работа с ключевыми кадрами……………………………………………………………………………………….. 436

44.9. Объединение нескольких анимаций……………………………………………………………………………… 437

44.10. Использование инспектора анимации………………………………………………………………………… 440

44.11. Заключение……………………………………………………………………………………………………………………. 441

Глава 45. Рисование графики с помощью Canvas в Compose……………….. 442

45.1. Знакомство с компонентом Canvas……………………………………………………………………………….. 442

45.2. Создание проекта CanvasDemo…………………………………………………………………………………….. 442

45.3. Рисование линии и получение размера холста……………………………………………………………. 443

45.4. Рисование пунктирных линий……………………………………………………………………………………….. 444

45.5. Рисование прямоугольника……………………………………………………………………………………………. 445

45.6. Применение вращения……………………………………………………………………………………………………. 449

45.7. Рисование кругов и овалов…………………………………………………………………………………………….. 449

45.8. Рисование градиентов…………………………………………………………………………………………………….. 451

45.9. Рисование дуг………………………………………………………………………………………………………………….. 454

45.10. Рисование путей……………………………………………………………………………………………………………. 455

45.11. Рисование точек……………………………………………………………………………………………………………. 456

45.12. Рисование изображения……………………………………………………………………………………………….. 457

45.13. Рисование текста…………………………………………………………………………………………………………… 460

45.14. Заключение……………………………………………………………………………………………………………………. 462

Глава 46. Работа с ViewModels в Compose…………………………………………….. 463

46.1. Что такое Android Jetpack?…………………………………………………………………………………………….. 463

46.2. «Старая» архитектура……………………………………………………………………………………………………. 463

46.3. Современная архитектура Android……………………………………………………………………………….. 464

46.4. Компонент ViewModel……………………………………………………………………………………………………. 464

46.5. Реализация ViewModel с помощью состояния……………………………………………………………… 465

46.6. Подключение состояния ViewModel к активити…………………………………………………………… 466

46.7. Реализация ViewModel с использованием LiveData…………………………………………………….. 468

46.8. Наблюдение за LiveData для ViewModel внутри активити…………………………………………. 468

46.9. Заключение……………………………………………………………………………………………………………………… 469

Глава 47. Руководство по ViewModel в Compose…………………………………… 470

47.1. О проекте…………………………………………………………………………………………………………………………. 470

47.2. Создание проекта ViewModelDemo………………………………………………………………………………. 471

47.3. Добавление ViewModel…………………………………………………………………………………………………… 472

47.4. Доступ к DemoViewModel из MainActivity……………………………………………………………………. 473

47.5. Проектирование компонуемой функции для ввода температуры………………………………. 474

47.6. Проектирование компонуемой функции для ввода температуры………………………………. 476

47.7. Завершение дизайна пользовательского интерфейса…………………………………………………. 479

47.8. Тестирование приложения…………………………………………………………………………………………….. 480

47.9. Заключение……………………………………………………………………………………………………………………… 480

Глава 48. Обзор базы данных SQLite……………………………………………………. 481

48.1. Понимание таблиц базы данных…………………………………………………………………………………… 481

48.2. Знакомство со схемой базы данных……………………………………………………………………………… 481

48.3. Столбцы и типы данных………………………………………………………………………………………………… 482

48.4. Строки базы данных………………………………………………………………………………………………………. 482

48.5. Введение в первичные ключи………………………………………………………………………………………… 482

48.6. Что такое SQLite?……………………………………………………………………………………………………………. 483

48.7. Язык структурированных запросов………………………………………………………………………………. 483

48.8. Тестирование SQLite на виртуальном устройстве Android…………………………………………. 484

48.9. Android-библиотека Room для хранения данных на устройстве………………………………. 486

48.10. Заключение……………………………………………………………………………………………………………………. 486

Глава 49. Базы данных Room в Compose………………………………………………. 487

49.1. Пересмотр современной архитектуры приложений……………………………………………………. 487

49.2. Ключевые элементы базы данных Room……………………………………………………………………… 488

49.2.1. Репозиторий………………………………………………………………………………………………………… 488

49.2.2. База данных Room…………………………………………………………………………………………….. 488

49.2.3. Объект доступа к данным (DAO)………………………………………………………………………. 488

49.2.4. Сущности…………………………………………………………………………………………………………….. 488

49.2.5. База данных SQLite……………………………………………………………………………………………. 489

49.3. Понимание сущностей……………………………………………………………………………………………………. 490

49.4. Объекты доступа к данным……………………………………………………………………………………………. 492

49.5. База данных Room…………………………………………………………………………………………………………. 494

49.6. Репозиторий…………………………………………………………………………………………………………………….. 495

49.7. Базы данных, хранящиеся в памяти……………………………………………………………………………… 496

49.8. Инспектор баз данных……………………………………………………………………………………………………. 496

49.9. Заключение……………………………………………………………………………………………………………………… 497

Глава 50. Руководство по базам данных Room и Репозиторию в Compose 498

50.1. О проекте RoomDemo…………………………………………………………………………………………………….. 498

50.2. Создание проекта RoomDemo………………………………………………………………………………………. 498

50.3. Модификация конфигурации сборки…………………………………………………………………………….. 499

50.4. Создание сущности………………………………………………………………………………………………………… 501

50.5. Создание DAO…………………………………………………………………………………………………………………. 502

50.6. Добавление базы данных Room……………………………………………………………………………………. 503

50.7. Добавление репозитория……………………………………………………………………………………………….. 504

50.8. Добавление ViewModel…………………………………………………………………………………………………… 506

50.9. Проектирование пользовательского интерфейса………………………………………………………… 508

50.10. Написание класса ViewModelProviderFactory……………………………………………………………. 510

50.11. Завершение функции MainScreen………………………………………………………………………………… 512

50.12. Тестирование приложения RoomDemo………………………………………………………………………. 515

50.13. Использование Database Inspector………………………………………………………………………………. 515

50.14. Заключение……………………………………………………………………………………………………………………. 516

Глава 51. Обзор навигации в Compose…………………………………………………. 517

51.1. Понимание навигации…………………………………………………………………………………………………….. 517

51.2. Объявление контроллера навигации…………………………………………………………………………….. 519

51.3. Объявление хоста навигации…………………………………………………………………………………………. 519

51.4. Добавление пунктов назначения в навигационный граф……………………………………………. 520

51.5. Навигация к пунктам назначения………………………………………………………………………………….. 522

51.6. Передача аргументов в пункт назначения……………………………………………………………………. 523

51.7. Работа с нижними навигационными панелями……………………………………………………………. 525

51.8. Заключение……………………………………………………………………………………………………………………… 526

Глава 52. Руководство по навигации в Compose…………………………………… 527

52.1. Создание проекта NavigationDemo……………………………………………………………………………….. 527

52.2. О проекте NavigationDemo…………………………………………………………………………………………….. 528

52.3. Объявление маршрутов навигации……………………………………………………………………………….. 528

52.4. Добавление домашнего экрана……………………………………………………………………………………… 528

52.5. Добавление экрана приветствия……………………………………………………………………………………. 530

52.6. Добавление экрана профиля………………………………………………………………………………………….. 531

52.7. Создание контроллера навигации и хоста…………………………………………………………………… 531

52.8. Реализация навигации по экрану………………………………………………………………………………….. 532

52.9. Передача аргумента имени пользователя……………………………………………………………………. 533

52.10. Тестирование проекта………………………………………………………………………………………………….. 534

52.11. Заключение……………………………………………………………………………………………………………………. 535

Глава 53. Руководство по навигационной панели в Compose……………….. 536

53.1. Создание проекта BottomBarDemo………………………………………………………………………………. 536

53.2. Объявление маршрутов навигации……………………………………………………………………………….. 537

53.3. Проектирование элементов панели………………………………………………………………………………. 537

53.4. Создание списка элементов панели………………………………………………………………………………. 538

53.5. Добавление экранов назначения…………………………………………………………………………………… 539

53.6. Создание контроллера и хоста навигации…………………………………………………………………… 541

53.7. Проектирование панели навигации………………………………………………………………………………. 541

53.8. Работа с компонентом Scaffold……………………………………………………………………………………… 543

53.9. Тестирование проекта……………………………………………………………………………………………………. 544

53.10. Заключение……………………………………………………………………………………………………………………. 545

Глава 54. Распознавание жестов в Compose………………………………………….. 546

54.1. Распознавание жестов в Compose…………………………………………………………………………………. 546

54.2. Создание проекта GestureDemo…………………………………………………………………………………….. 546

54.3. Обнаружение жестов нажатия………………………………………………………………………………………. 547

54.4. Обнаружение нажатий с помощью PointerInputScope………………………………………………… 548

54.5. Обнаружение жестов перетаскивания………………………………………………………………………….. 550

54.6. Обнаружение жестов перетаскивания с помощью PointerInputScope……………………….. 552

54.7. Прокрутка с помощью модификатора scrollable………………………………………………………….. 553

54.8. Модификаторы прокрутки…………………………………………………………………………………………….. 554

54.9. Обнаружение жестов сжатия…………………………………………………………………………………………. 556

54.10. Определение жестов вращения……………………………………………………………………………………. 558

54.11. Обнаружение жестов сдвига………………………………………………………………………………………… 559

54.12. Заключение……………………………………………………………………………………………………………………. 560

Глава 55. Работа с закрепленными перетаскиваемыми компонентами… 561

55.1. Перетаскивание и якоря…………………………………………………………………………………………………. 561

55.2. Обнаружение жестов перетаскивания………………………………………………………………………….. 561

55.3. Объявление точек привязки……………………………………………………………………………………………. 562

55.4. Объявление порогов……………………………………………………………………………………………………….. 562

55.5. Объявление перетаскиваемого состояния…………………………………………………………………….. 562

55.6. Перемещение компонента в ответ на жест перетаскивания……………………………………….. 563

55.7. О проекте DraggableDemo………………………………………………………………………………………………. 564

55.8. Создание проекта DraggableDemo………………………………………………………………………………… 564

55.9. Добавление библиотеки Foundation……………………………………………………………………………… 565

55.10. Добавление перечислений якорей………………………………………………………………………………. 565

55.11. Настройка перетаскиваемого состояния и якорей…………………………………………………….. 566

55.12. Проектирование родительского элемента Box………………………………………………………….. 567

55.13. Добавление перетаскиваемого элемента Box……………………………………………………………. 569

55.14. Тестирование проекта………………………………………………………………………………………………….. 572

55.15. Заключение……………………………………………………………………………………………………………………. 572

Глава 56. Введение в потоки Kotlin………………………………………………………. 573

56.1. Понимание потоков………………………………………………………………………………………………………… 573

56.2. Создание примера проекта……………………………………………………………………………………………. 574

56.3. Добавление модели представления в проект……………………………………………………………….. 575

56.4. Объявление потока…………………………………………………………………………………………………………. 575

56.5. Передача потоковых данных………………………………………………………………………………………… 576

56.6. Сбор потоковых данных в виде состояния…………………………………………………………………… 577

56.7. Преобразование данных с помощью посредников……………………………………………………… 578

56.8. Сбор потоковых данных………………………………………………………………………………………………… 580

56.9. Добавление буфера потока……………………………………………………………………………………………. 582

56.10. Другие терминальные операторы потока………………………………………………………………….. 583

56.11. Выравнивание потока………………………………………………………………………………………………….. 584

56.12. Объединение нескольких потоков……………………………………………………………………………….. 586

56.13. Горячие и холодные потоки………………………………………………………………………………………… 587

56.14. StateFlow………………………………………………………………………………………………………………………… 587

56.15. SharedFlow……………………………………………………………………………………………………………………… 589

56.16. Преобразование холодного потока в горячий…………………………………………………………… 591

56.17. Заключение……………………………………………………………………………………………………………………. 591

Глава 57. Руководство по SharedFlow в Compose………………………………….. 592

57.1. О проекте…………………………………………………………………………………………………………………………. 592

57.2. Создание проекта SharedFlowDemo……………………………………………………………………………… 592

57.3. Добавление модели представления в проект……………………………………………………………….. 593

57.4. Объявление SharedFlow………………………………………………………………………………………………….. 594

57.5. Сбор значений из потока……………………………………………………………………………………………….. 595

57.6. Тестирование приложения SharedFlowDemo……………………………………………………………….. 596

57.7. Обработка потоков в фоновом режиме…………………………………………………………………………. 597

57.8. Заключение……………………………………………………………………………………………………………………… 599

Глава 58. Руководство по биометрической аутентификации в Android… 600

58.1. Обзор биометрической аутентификации………………………………………………………………………. 600

58.2. Создание проекта биометрической аутентификации………………………………………………….. 600

58.3. Добавление биометрической зависимости…………………………………………………………………… 601

58.4. Настройка аутентификации по отпечаткам пальцев………………………………………………….. 601

58.5. Добавление биометрических разрешений в файл манифеста…………………………………….. 602

58.6. Проверка настроек безопасности………………………………………………………………………………….. 603

58.7. Проектирование пользовательского интерфейса………………………………………………………… 604

58.8. Настройка колбэков аутентификации………………………………………………………………………….. 605

58.9. Запуск биометрического запроса………………………………………………………………………………….. 606

58.10. Тестирование проекта………………………………………………………………………………………………….. 607

58.11. Заключение……………………………………………………………………………………………………………………. 607

Глава 59. Работа с Google Maps API в Android Studio……………………………. 608

59.1. Элементы Google Maps…………………………………………………………………………………………………… 608

59.2. Создание проекта Google Maps……………………………………………………………………………………… 609

59.3. Создание учетной записи Google Cloud………………………………………………………………………… 609

59.4. Создание нового проекта Google Cloud………………………………………………………………………… 610

59.5. Включение Google Maps SDK………………………………………………………………………………………… 611

59.6. Генерация ключа Google Maps………………………………………………………………………………………. 612

59.7. Добавление ключа API в проект……………………………………………………………………………………. 612

59.8. Добавление зависимости Compose Map………………………………………………………………………. 614

59.9. Создание карты………………………………………………………………………………………………………………. 614

59.10. Тестирование приложения…………………………………………………………………………………………… 614

59.11. Понимание геокодирования и обратного геокодирования……………………………………….. 615

59.12. Указание местоположения на карте……………………………………………………………………………. 617

59.13. Изменение типа карты………………………………………………………………………………………………….. 618

59.14. Отображение элементов управления картой для пользователя………………………………. 620

59.15. Обработка взаимодействия жестов с картой……………………………………………………………… 621

59.15.1. Жесты масштабирования………………………………………………………………………………. 621

59.15.2. Жесты прокрутки/сдвига карты……………………………………………………………………. 622

59.15.3. Жесты наклона карты……………………………………………………………………………………. 622

59.15.4. Жесты поворота карты………………………………………………………………………………….. 622

59.16. Создание маркеров карты……………………………………………………………………………………………. 622

59.17. Управление камерой карты…………………………………………………………………………………………. 624

59.18. Заключение……………………………………………………………………………………………………………………. 625

Глава 60. Создание, тестирование и загрузка пакета Android-приложений 626

60.1. Процесс подготовки к релизу…………………………………………………………………………………………. 626

60.2. Пакеты Android-приложений…………………………………………………………………………………………. 626

60.3. Регистрация аккаунта в консоли разработчика Google Play………………………………………. 627

60.4. Настройка приложения в консоли………………………………………………………………………………… 628

60.5. Включение подписи приложений в Google Play…………………………………………………………… 628

60.6. Создание файла для хранения ключей…………………………………………………………………………. 631

60.7. Создание пакета Android-приложений…………………………………………………………………………. 632

60.8. Создание тестовых APK-файлов……………………………………………………………………………………. 634

60.9. Загрузка пакета приложения в Консоль разработчика Google Play………………………….. 635

60.10. Обзор пакета приложений……………………………………………………………………………………………. 636

60.11. Управление тестерами…………………………………………………………………………………………………. 638

60.12. Развертывание приложения для тестирования………………………………………………………….. 639

60.13. Загрузка новых версий пакета приложений………………………………………………………………. 639

60.14. Анализ файла пакета приложения………………………………………………………………………………. 640

60.15. Заключение……………………………………………………………………………………………………………………. 641

Глава 61. Обзор биллинга в Android-приложениях……………………………….. 642

61.1. Подготовка проекта для покупок внутри приложения………………………………………………… 642

61.2. Создание продуктов и подписок внутри приложения…………………………………………………. 643

61.3. Инициализация BillingClient…………………………………………………………………………………………… 644

61.4. Подключение к библиотеке Google Play Billing…………………………………………………………….. 645

61.5. Запрос доступных продуктов………………………………………………………………………………………… 645

61.6. Запуск процесса покупки……………………………………………………………………………………………….. 646

61.7. Завершение покупки……………………………………………………………………………………………………….. 647

61.8. Запрос предыдущих покупок………………………………………………………………………………………… 648

61.9. Заключение……………………………………………………………………………………………………………………… 649

Глава 62. Руководство по покупкам в приложении Android…………………. 650

62.1. О проекте тестовых покупок в приложении…………………………………………………………………. 650

62.2. Создание проекта InAppPurchase………………………………………………………………………………….. 650

62.3. Добавление библиотек в проект……………………………………………………………………………………. 651

62.4. Добавление приложения в Google Play Store………………………………………………………………… 652

62.5. Создание продукта внутри приложения………………………………………………………………………. 652

62.6. Включение тестировщиков лицензий……………………………………………………………………………. 653

62.7. Создание вспомогательного класса для покупок………………………………………………………… 654

62.8. Добавление потоков StateFlow………………………………………………………………………………………. 655

62.9. Инициализация BillingClient…………………………………………………………………………………………… 655

62.10. Запрос продукта…………………………………………………………………………………………………………… 656

62.11. Обработка обновлений покупок………………………………………………………………………………….. 657

62.12. Запуск процесса покупки…………………………………………………………………………………………….. 658

62.13. Использование продукта……………………………………………………………………………………………… 659

62.14. Восстановление предыдущей покупки……………………………………………………………………….. 659

62.15. Завершение MainActivity……………………………………………………………………………………………… 660

62.16. Тестирование приложения…………………………………………………………………………………………… 662

62.17. Устранение неполадок…………………………………………………………………………………………………. 665

62.18. Заключение……………………………………………………………………………………………………………………. 665

Глава 63. Работа с темами в Compose…………………………………………………… 666

63.1. Material Design 2 и Material Design 3………………………………………………………………………………. 666

63.2. Тематизация Material Design 3……………………………………………………………………………………….. 666

63.3. Заключение……………………………………………………………………………………………………………………… 671

Глава 64. Руководство по тематическому оформлению Material Design 3 672

64.1. Создание проекта ThemeDemo……………………………………………………………………………………… 672

64.2. Проектирование пользовательского интерфейса………………………………………………………… 672

64.3. Создание новой темы……………………………………………………………………………………………………… 675

64.4. Добавление темы в проект……………………………………………………………………………………………… 676

64.5. Включение динамических цветов………………………………………………………………………………….. 676

64.6. Заключение……………………………………………………………………………………………………………………… 678

Глава 65. Обзор на Gradle в Android Studio…………………………………………… 679

65.1. Обзор Gradle…………………………………………………………………………………………………………………….. 679

65.2. Gradle и Android Studio……………………………………………………………………………………………………. 679

65.2.1. Разумные значения по умолчанию…………………………………………………………………… 680

65.2.2. Зависимости………………………………………………………………………………………………………… 680

65.2.3. Варианты сборки……………………………………………………………………………………………….. 680

65.2.4. Записи манифеста………………………………………………………………………………………………. 680

65.2.5. Подписание APK…………………………………………………………………………………………………. 681

65.2.6. Поддержка ProGuard………………………………………………………………………………………….. 681

65.3. Файл сборки Gradle со свойствами и настройками……………………………………………………… 681

65.4. Файл сборки Gradle верхнего уровня……………………………………………………………………………. 682

65.5. Файлы сборки Gradle на уровне модуля……………………………………………………………………….. 683

65.6. Настройка параметров подписи в файле сборки…………………………………………………………. 686

65.7. Запуск задач Gradle из командной строки……………………………………………………………………. 687

65.8. Заключение……………………………………………………………………………………………………………………… 687