Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

Вопрос 30: Технологии разработки Android-приложений

1. Введение: платформа Android

Android — это мобильная операционная система на базе ядра Linux, разрабатываемая компанией Google и Open Handset Alliance. Она является самой популярной мобильной ОС в мире, занимая около 70-75% рынка.

Разработка под Android имеет свою специфику: множество версий ОС, разнообразие устройств (разные размеры экранов, характеристики), особенности жизненного цикла приложений.

В этом вопросе мы рассмотрим основные технологии, языки, инструменты и подходы, используемые для создания Android-приложений.

2. Основные языки программирования для Android

2.1. Kotlin

Kotlin — современный, лаконичный и безопасный язык программирования, разработанный компанией JetBrains. С 2019 года Google объявил Kotlin предпочтительным языком для разработки под Android.

Особенности:

  • Полная совместимость с Java (можно использовать все Java-библиотеки).

  • Null-безопасность (типы по умолчанию не могут быть null).

  • Функциональные возможности (лямбды, extension-функции).

  • Корутины (coroutines) для асинхронного программирования.

  • Data-классы, smart-casts и другие современные фичи.

Пример простого приложения на Kotlin:

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

2.2. Java

Java — исторически первый язык для Android. До сих пор используется в огромном количестве проектов и поддерживается Google.

Особенности:

  • Объектно-ориентированный, строго типизированный.

  • Огромное количество библиотек и примеров.

  • Знаком многим разработчикам.

Пример того же приложения на Java:

Плюсы: Зрелость, огромное сообщество, стабильность. Минусы: Более многословен, чем Kotlin, нет некоторых современных фич "из коробки".

2.3. C++ (Android NDK)

Android NDK (Native Development Kit) позволяет писать части приложения на C или C++. Это используется для:

  • Критичных к производительности частей (игры, обработка сигналов).

  • Использования существующих C/C++ библиотек.

  • Кроссплатформенной разработки (общий код с iOS).

Обычно приложение пишется на Java/Kotlin, а NDK используется только для отдельных модулей.

2.4. Другие языки (через кроссплатформенные фреймворки)

  • Dart (Flutter)

  • C# (Xamarin)

  • JavaScript/TypeScript (React Native)

  • C++ (Qt)

Об этом подробнее в разделе про кроссплатформенную разработку

3. Основные компоненты Android-приложения

Любое Android-приложение строится из нескольких ключевых компонентов, описанных в манифесте.

3.1. Activity (Активность)

Activity — это компонент, представляющий один экран с пользовательским интерфейсом. Например, экран входа, список сообщений, просмотр фото.

Жизненный цикл Activity:

  • onCreate() — создание (инициализация).

  • onStart() — становится видимой.

  • onResume() — получает фокус (готова к взаимодействию).

  • onPause() — частично скрыта (например, открыто диалоговое окно).

  • onStop() — полностью скрыта.

  • onDestroy() — уничтожение.

3.2. Service (Служба)

Service — компонент, который выполняет длительные операции в фоне без пользовательского интерфейса (например, загрузка файла, воспроизведение музыки).

Типы служб:

  • Foreground Service — служба с уведомлением (например, музыкальный плеер).

  • Background Service — фоновая служба (ограничения в новых версиях Android).

  • Bound Service — служба, к которой могут подключаться другие компоненты.

3.3. Broadcast Receiver (Широковещательный приёмник)

Broadcast Receiver — компонент, который реагирует на системные или пользовательские широковещательные сообщения (например, "батарея разряжена", "пришла SMS", "загрузка завершена").

3.4. Content Provider (Поставщик контента)

Content Provider — компонент для доступа к общим данным (например, контактам, медиафайлам) и для обмена данными между приложениями.

3.5. Intent (Намерение)

Intent — это объект, который используется для запуска компонентов (Activity, Service, Broadcast Receiver) и передачи данных между ними. Intent может быть явным (указываем конкретный класс) или неявным (указываем действие, система ищет подходящий компонент).

4. Пользовательский интерфейс

4.1. XML-разметка

Традиционно интерфейс в Android описывается в XML-файлах. Каждый элемент интерфейса — это View (например, TextView, Button, ImageView) или ViewGroup (LinearLayout, RelativeLayout, ConstraintLayout).

Пример XML-разметки:

4.2. Jetpack Compose (современный подход)

Jetpack Compose — это современный инструментарий для создания интерфейсов на Kotlin, использующий декларативный подход (как SwiftUI или React). Вместо XML интерфейс описывается прямо в коде на Kotlin.

Пример:

Плюсы Compose: Меньше кода, проще поддерживать, реактивность, современный подход. Минусы: Требует Kotlin, относительно новый, меньше примеров.

4.3. Ресурсы

Android использует систему ресурсов: изображения, строки, цвета, размеры, стили и темы выносятся в отдельные файлы в папке res/. Это упрощает локализацию и адаптацию под разные устройства.

5. Архитектурные паттерны

Для создания поддерживаемых и тестируемых приложений рекомендуется использовать архитектурные паттерны.

5.1. MVVM (Model-View-ViewModel)

Рекомендуемый Google паттерн. Использует:

  • Model — данные (репозитории, источники данных).

  • View — Activity/Fragment, отображает данные и отправляет действия пользователя.

  • ViewModel — хранит данные, связанные с UI, переживает поворот экрана.

Пример:

5.2. MVI (Model-View-Intent)

Более реактивный подход, где состояния и события строго типизированы.

5.3. Clean Architecture

Разделение приложения на слои (presentation, domain, data) для максимальной независимости и тестируемости.

6. Работа с данными

6.1. Room (ORM для SQLite)

Room — библиотека от Google для работы с локальной базой данных SQLite. Предоставляет удобный API с проверкой на этапе компиляции.

Пример:

6.2. DataStore (замена SharedPreferences)

DataStore — современное решение для хранения небольших объёмов данных (настроек). Поддерживает Kotlin Coroutines и Flow.

6.3. Сетевые запросы

  • Retrofit — самая популярная библиотека для HTTP-запросов. Работает с OkHttp.

  • OkHttp — HTTP-клиент.

  • Ktor Client — клиент от JetBrains, хорошо интегрируется с Kotlin.

Пример с Retrofit:

6.4. Хранение файлов

  • Внутреннее хранилище (только для приложения).

  • Внешнее хранилище (общие файлы).

  • MediaStore для медиафайлов.

7. Асинхронное программирование

Android требует асинхронной работы, чтобы не блокировать UI-поток.

7.1. Kotlin Coroutines

Рекомендуемый способ для асинхронности в Kotlin. Лёгкие, эффективные.

Пример:

7.2. RxJava / RxKotlin

Реактивное программирование, мощное, но сложное. Используется в старых проектах.

7.3. AsyncTask (устарел)

Классический, но устаревший способ. Не рекомендуется к использованию.

8. Внедрение зависимостей (DI)

Для управления зависимостями используются:

  • Dagger 2 / Hilt — фреймворк от Google, основанный на Dagger. Hilt упрощает настройку.

  • Koin — простой DI для Kotlin.

  • Manual DI — ручное внедрение для маленьких проектов.