Разработка мобильных приложений. Программирование мобильных устройств на языке Kotlin. Учебное пособие для СПО
.pdfСРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ
_________________________________________________________________
Сибирский государственный университет телекоммуникаций и информатики (СибГУТИ)
У.В. Осипова, И.В. Нечта
РАЗРАБОТКА МОБИЛЬНЫХ ПРИЛОЖЕНИЙ. ПРОГРАММИРОВАНИЕ МОБИЛЬНЫХ УСТРОЙСТВ НА ЯЗЫКЕ KOTLIN
Учебное пособие для СПО
Саратов
Профобразование
2026
УДК 004.4 ББК 32.973
О-74
Рецензенты:
Шушнов М.С. — канд. техн. наук, доц.; Подколзин В.В. — канд. физ.-мат. наук, доц.
Осипова, Ульяна Владимировна.
О-74 Разработка мобильных приложений. Программирование мобильных устройств на языке Kotlin : учебное пособие для СПО / У.В. Осипова, И.В. Нечта ; Сибирский государственный университет телекоммуникаций и информатики. — Саратов : Профобразование, 2026. — 78 с. — (Среднее профессиональное образование). — Текст : электронный.
ISBN 978-5-4488-3046-4
В учебном пособии даны практические работы, направленные на освоение программирования для мобильных устройств на языке Kotlin. Каждая работа представляет собой задание, требующее применения полученных знаний и самостоятельного решения задач. Выполнение практических работ позволит не только углубить понимание мобильной разработки и языка Kotlin, но и развить навыки анализа, проектирования и отладки программного кода.
Учебное пособие предназначено для изучения дисциплин «Разработка мобильных приложений», «Разработка мобильных приложений с поддержкой искусственного интеллекта» по укрупненной группе специальностей среднего профессионального образования «Информатика и вычислительная техника».
Учебное электронное издание
Обложка Я.А. Кирсанов, С.С. Сизиумова, фотобанк Magnific
ISBN 978-5-4488-3046-4 © Осипова У.В., Нечта И.В., 2025
©Сибирский государственный университет телекоммуникаций и информатики, 2025
©Оформление. ООО «Профобразование», 2026
2
СОДЕРЖАНИЕ |
|
БИБЛИОТЕКА JETPACK COMPOSE ........................................................................ |
4 |
CONTINUOUS INTEGRATION&DEPLOYMENT .................................................... |
7 |
DOCKER....................................................................................................................... |
10 |
ПРАКТИЧЕСКАЯ РАБОТА 1 ................................................................................... |
12 |
OpenGL ES 1.0. ............................................................................................................ |
13 |
Работа с текстурами .................................................................................................... |
17 |
Масштабирование (проекция).................................................................................... |
21 |
ПРАКТИЧЕСКАЯ РАБОТА 2 ................................................................................... |
24 |
Вращение фигур .......................................................................................................... |
25 |
Стереометрия ............................................................................................................... |
28 |
ПРАКТИЧЕСКАЯ РАБОТА 3 ................................................................................... |
30 |
Элемент Button............................................................................................................. |
31 |
Прозрачность фигур .................................................................................................... |
32 |
ПРАКТИЧЕСКАЯ РАБОТА 4 ................................................................................... |
35 |
Модель Фонга. Ч. 1...................................................................................................... |
36 |
Open GL ES 2.0. ........................................................................................................... |
40 |
Модель Фонга. Ч. 2...................................................................................................... |
41 |
ПРАКТИЧЕСКАЯ РАБОТА 5 ................................................................................... |
46 |
Карта теней................................................................................................................... |
47 |
Шум Перлина............................................................................................................... |
50 |
ПРАКТИЧЕСКАЯ РАБОТА 6 ................................................................................... |
54 |
Водная гладь ................................................................................................................ |
55 |
ПРАКТИЧЕСКАЯ РАБОТА 7 ................................................................................... |
60 |
Туман ............................................................................................................................ |
61 |
NDK (Native Development Kit) ................................................................................... |
65 |
JNI (Java Native Interface)............................................................................................ |
67 |
ПРАКТИЧЕСКАЯ РАБОТА 8 ................................................................................... |
72 |
Сертификаты в APK .................................................................................................... |
73 |
Дамп процесса в Android Studio................................................................................. |
75 |
ЗАКЛЮЧЕНИЕ ........................................................................................................... |
76 |
САМОСТОЯТЕЛЬНЫЕ ВОПРОСЫ......................................................................... |
77 |
ЛИТЕРАТУРА ............................................................................................................. |
78 |
3
3
БИБЛИОТЕКА JETPACK COMPOSE
Построение интерфейса – это один из важных этапов создания программного приложения. Строго говоря, пользователь оценивает удобство пользования приложением по интерфейсу, который должен быть интуитивно понятным. С другой стороны, программист разрабатывает интерфейс с тем учетом, чтобы оградить пользователя от внутренней реализации алгоритма, создавая таким образом уровень абстракции.
Ранние SDK для Android проектов описывали интерфейс в виде xmlфайлов. Приложение после компиляции хранило такие файлы в виде ресурсов. При запуске программы производилось извлечение ресурсов разметки, их разбор (парсинг) и интерпретировался соответствующим образом. Такая сложная система построения интерфейса, с одной стороны, позволяла с легкостью заменять xml разметку на другую (по принципу модульности), например, сделанную в специальной дизайнерской программе, но, с другой стороны, тратило существенно процессорного времени на процедуру парсинга.
Ранее обработка разметки выполнялась функцией setContentView(). Вместо нее определен блок прорисовки разметки активности setContent{ }.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent { JetpackCompose1Theme {
Text(text = "Hello ")
}}}}
Элемент Text рисует не редактируемую строку. В скобках через запятую указываются параметры строки, например, содержимое или шрифт.
Если в разметке указать два текстовых поля, то строки наложатся друг на друга. Правильное отображение нужно либо реализовывать через описание строк и столбцов или используя имеющуюся тему оформления.
Jetpack Compose – это современный UI-технология, предназначенная для разработки нативных интерфейсов Android с использованием декларативного подхода. Он значительно упрощает и ускоряет разработку UI по сравнению с традиционным XML-подходом.
Compose позволяет описывать UI в виде функций, которые принимают данные и описывают желаемый результат. Вместо ручного управления viewэлементами вы просто описываете, как должен выглядеть UI в зависимости от текущего состояния данных. Compose сам заботится о рендеринге и обновлении UI при изменении данных.
Compose написан на Kotlin и полностью использует возможности этого языка, что обеспечивает: уменьшение количества ошибок во время выполнения, компактность и читабельность кода по сравнению с XML, а также легкую интеграцию с существующими Android проектами на Kotlin.
5
4
Кратко опишем наиболее очевидные преимущества использования
Compose:
•Меньше кода: Compose позволяет создавать сложные UI с гораздо меньшим количеством кода, чем при использовании XML. Это приводит к уменьшению времени разработки и облегчает поддержку кода.
•Компоненто-ориентированность: UI строится из переиспользуемых компонентов (Composable functions). Это позволяет легко создавать и поддерживать консистентный стиль во всем приложении.
•Автоматическое обновление UI: Compose автоматически перерисовывает только те части UI, которые изменились. Это обеспечивает более плавную и эффективную работу приложения.
•Предпросмотр в режиме реального времени: Android Studio
предоставляет возможность предварительного просмотра Composable функций в режиме реального времени, что значительно ускоряет разработку UI.
•Простая анимация: Compose предоставляет мощные инструменты для создания анимации с минимальным количеством кода.
•Поддержка Material Design: Compose предлагает встроенную поддержку Material Design, что позволяет легко создавать современные и стильные интерфейсы.
•Тестируемость: Composable функции легко тестировать, так как они являются чистыми функциями, принимающими входные данные и возвращающими UI.
•Межплатформенная разработка (Multiplatform): Compose Multiplatform
позволяет использовать Compose не только для Android, но и для других платформ, таких как iOS, Desktop и Web, используя общую кодовую базу.
Основные концепции Jetpack Compose:
•Composable Functions: Функции, аннотированные @Composable, которые описывают UI. Они могут принимать параметры и вызывать другие Composable функции. Composable функции не должны иметь побочных эффектов.
•State: Данные, которые влияют на отображение UI. Compose
предоставляет механизмы для управления состоянием, такие как remember, mutableStateOf, rememberSaveable.
•Modifiers: Объекты, которые используются для настройки внешнего вида и поведения Composable элементов (например, размера, отступов, фона).
•Layouts: Composable функции, которые используются для организации и
позиционирования |
других |
Composable |
элементов |
(например, Column, Row, Box). |
|
|
|
•Effects: Механизмы для выполнения побочных эффектов в Composable функциях (например, вызов API, управление жизненным циклом компонентов).
6
5
Пример простого Composable:
import androidx.compose.material.Text import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
@Composable
fun Greeting(name: String) { Text(text = "Hello $name!")
}
@Preview(showBackground = true) @Composable
fun DefaultPreview() { Greeting("Android")
}
Kotlin
В этом примере:
•Greeting – это Composable функция, которая принимает имя и отображает приветствие.
•@Composable – аннотация, указывающая, что это Composable функция.
•@Preview – аннотация, позволяющая предварительно просматривать эту функцию в Android Studio.
Допускается использовать выносить код построения интерфейса в
отдельные функции, которые удобно использовать повторно. Такие функции помечаются аннотацией @Compose и внутри себя они также должны вызывать compose функции.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent { JetpackCompose1Theme { Column{ Greeting("Android2") Greeting("Android3")
}
}
}
@Composable
fun Greeting(name: String) { Text(text = "Hello $name!")
}
7
6
Разметка строк и столбцов выполняется командами Row и Colomn.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContent { JetpackCompose1Theme {
Row{
Greeting("Android1") Column {
Greeting("Android2")
Greeting("Android3")}}}
Поскольку интерфейс более не создается простым перетаскиванием графических компонент в редакторе Android Studio, то возникла необходимость предварительного просмотра. Так, для Composable функций, которые не принимают входных параметров, допускается добавлять аннотацию @Preview, которая позволит показать получившийся дизайн интерфейса еще до компиляции проекта.
@Preview
@Composable fun showMyTextInEditor(){ showMyText(s = "Example")
}
CONTINUOUS INTEGRATION&DEPLOYMENT
В современной разработке программного обеспечения скорость, надежность и частота выпуска новых версий играют критически важную роль. Традиционные методы разработки, при которых интеграция кода и развертывание происходят редко и вручную, часто приводят к проблемам: конфликтам кода, сложностям в тестировании и длительным циклам выпуска.
Чтобы решить эти проблемы, были разработаны методологии Continuous Integration (CI) и Continuous Deployment (CD), которые позволяют автоматизировать процессы сборки, тестирования и развертывания. CI/CD – это практики автоматизации процесса разработки, от интеграции кода до развертывания в production, позволяющие командам выпускать обновления быстрее и надежнее. Это фундамент современной DevOps культуры.
1. Continuous Integration (Непрерывная интеграция)
Continuous Integration (CI) – это практика разработки программного обеспечения, при которой все разработчики регулярно интегрируют свой код в общий репозиторий (например, Git). Каждая интеграция верифицируется автоматизированной сборкой и серией тестов. Цель данной технологии – частое автоматическое объединение кода от разных разработчиков в общий репозиторий. С технической точки зрения, цель CI – обеспечить
8
7
последовательный и автоматизированный способ сборки, упаковки и тестирования приложений. При налаженном процессе непрерывной интеграции разработчики с большей вероятностью будут делать частые коммиты, что, в свою очередь, будет способствовать улучшению коммуникации и повышению качества программного обеспечения.
Основные принципы CI:
•Частая интеграция кода: разработчики должны интегрировать свой код в основную ветку (например, main или master) несколько раз в день.
•Автоматизированная сборка: при каждой интеграции должна запускаться автоматизированная сборка проекта. Это включает в себя компиляцию кода, создание исполняемых файлов и других необходимых артефактов.
•Автоматизированное тестирование: после сборки необходимо запускать автоматизированные тесты, чтобы проверить работоспособность нового кода и убедиться, что он не сломал существующую функциональность. Типы тестов могут включать:
o Юнит-тесты: проверяют отдельные модули или функции кода.
o Интеграционные тесты: проверяют взаимодействие между различными модулями.
oE2E тесты (end-to-end): Полное тестирование функциональности, имитирующее действия пользователя.
•Быстрая обратная связь: В случае ошибки в сборке или тестах разработчики должны получать немедленное уведомление, чтобы быстро исправить проблему.
•Поддержание работоспособной кодовой базы: Основная ветка репозитория должна всегда находиться в работоспособном состоянии.
Преимущества CI:
•Сокращение рисков интеграции: Раннее и частое выявление конфликтов кода и ошибок.
•Ускорение цикла разработки: Автоматизация процессов позволяет быстрее выпускать новые версии.
•Повышение качества кода: Автоматизированное тестирование позволяет выявлять ошибки на ранних стадиях.
•Снижение стоимости разработки: Раннее выявление и исправление ошибок обходится дешевле, чем исправление ошибок на более поздних этапах.
•Повышение прозрачности процесса разработки: Все участники команды видят состояние кодовой базы и результаты тестов.
9
8
2. Continuous Deployment (Непрерывное развертывание)
Continuous Deployment (CD) – это расширение Continuous Integration,
которое автоматически развертывает каждое изменение кода, прошедшее автоматизированные тесты, в целевую среду (например, тестовую среду, промежуточную среду или производственную среду). В данном случае целью является автоматически развертка изменений кода в production (или тестовые окружения) после прохождения всех тестов. Типичный CD-конвейер состоит из этапов сборки, тестирования и развертывания. Более сложные конвейеры включают в себя этапы получения кода из системы контроля версий и выполнение сборки, настройки инфраструктуры, копирования кода в целевую среду, настройки переменных окружения для целевой среды, развертывания компонентов приложения, выполнения дополнительных действий, таких как перезапуск сервисов или вызов сервисов, необходимых для работоспособности новых изменений, логирования и отправки оповещений о состоянии поставки.
Основные принципы CD:
•Автоматическое развертывание: каждое изменение кода, успешно прошедшее CI, автоматически развертывается.
•Автоматизированные тесты развертывания: после развертывания запускаются автоматизированные тесты, чтобы убедиться, что приложение работает в целевой среде.
•Мониторинг и отслеживание: необходимо вести мониторинг производительности приложения и отслеживать ошибки после развертывания.
•Быстрое восстановление: в случае проблем после развертывания должна быть предусмотрена возможность быстрого отката к предыдущей версии.
Преимущества CD:
•Ускорение цикла выпуска: Новые версии выпускаются намного быстрее, часто несколько раз в день.
•Быстрая обратная связь от пользователей: Пользователи получают новые функции и исправления ошибок быстрее, что позволяет получить более быструю обратную связь.
•Снижение рисков развертывания: Автоматизация процессов снижает вероятность человеческих ошибок при развертывании.
•Повышение эффективности команды: Разработчики могут сосредоточиться на разработке новых функций, а не на рутинных задачах развертывания.
Разница между Continuous Delivery и Continuous Deployment:
Важно отметить разницу между Continuous Delivery и Continuous Deployment. Continuous Delivery подразумевает, что код, прошедший CI, может быть развернут в любой момент (обычно нажатием кнопки). Continuous Deployment идет дальше и автоматически развертывает код без ручного вмешательства.
Пример CD-процесса (на основе CI):
1. (Шаги 1-7 как в примере CI)
10
9
2.Если сборка и тесты успешно пройдены, CI-сервер автоматически запускает процесс развертывания.
3.Процесс развертывания может включать:
o Обновление кода на серверах. o Обновление базы данных.
oПерезапуск серверов.
4.После развертывания запускаются автоматизированные тесты развертывания.
5.Если тесты развертывания проходят успешно, процесс завершается.
6.Если тесты развертывания проваливаются, выполняется автоматический откат к предыдущей версии.
7.Команда разработчиков получает уведомление о результате развертывания.
Continuous Integration и Continuous Deployment являются важными
практиками разработки программного обеспечения, которые позволяют автоматизировать процессы сборки, тестирования и развертывания. Внедрение CI/CD позволяет сократить риски, ускорить цикл разработки, повысить качество кода и повысить эффективность команды. Правильная реализация CI/CD требует инвестиций в автоматизацию, но в конечном итоге приводит к значительным улучшениям в процессе разработки программного обеспечения.
DOCKER
Контейнеризация – это форма виртуализации на уровне операционной системы (ОС), которая позволяет запускать приложения и их зависимости в изолированных пользовательских пространствах, называемых контейнерами. В отличие от виртуальных машин, которые эмулируют целую операционную систему для каждого приложения, контейнеры используют ядро хост-ОС совместно, что делает их значительно легче и эффективнее в использовании ресурсов.
Docker – это ведущая платформа для контейнеризации приложений, предоставляющая инструменты для создания, управления и распространения контейнеров. Docker состоит из нескольких ключевых компонентов:
•Docker Engine: Основной компонент, отвечающий за управление контейнерами. Он включает в себя Docker Daemon (фоновый процесс, управляющий контейнерами) и Docker CLI (командная строка для взаимодействия с Docker Daemon).
•Docker Image: Шаблон только для чтения, который содержит инструкции по созданию контейнера. Docker image определяет, какие компоненты (код, библиотеки, зависимости) будут включены в контейнер. Image можно рассматривать как “снимок” файловой системы и метаданных, необходимых для запуска приложения.
•Docker Container: Запущенный экземпляр Docker image. Контейнер представляет собой изолированный процесс, работающий на хост-ОС.
11
10
