Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка мобильных приложений. Программирование мобильных устройств на языке Kotlin. Учебное пособие для СПО

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
955 Кб
Скачать
☆

СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ

_________________________________________________________________

Сибирский государственный университет телекоммуникаций и информатики (СибГУТИ)

У.В. Осипова, И.В. Нечта

РАЗРАБОТКА МОБИЛЬНЫХ ПРИЛОЖЕНИЙ. ПРОГРАММИРОВАНИЕ МОБИЛЬНЫХ УСТРОЙСТВ НА ЯЗЫКЕ 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]