Android — мобільна операційна система Google з відкритим вихідним кодом (AOSP), що працює на ядрі Linux. Розробка під Android ведеться на Kotlin у середовищі Android Studio. Стаття охоплює архітектуру ОС, компоненти застосунків, Jetpack Compose та публікацію в Google Play.
Головне
Android — мобільна операційна система на базі ядра Linux, що розробляється Google з 2007 року. Вихідний код відкрито за ліцензією Apache 2.0 у рамках проєкту Android Open Source Project (AOSP). Кожен виробник може модифікувати систему та встановлювати на свої пристрої.
За даними StatCounter (2026), Android займає близько 72% світового ринку мобільних ОС. Найбільші виробники — Samsung, Xiaomi, Oppo, Vivo, Google Pixel. Фрагментація — ключова проблема платформи: одночасно використовуються тисячі моделей з різними версіями ОС.
Архітектура Android побудована на принципі привілеїв (permissions): кожен застосунок працює під окремим UID Linux і має доступ лише до своїх даних. Доступ до системних ресурсів (камера, мікрофон, контакти) запитується через Android Permissions під час виконання, починаючи з Android 6 (API 23).
Android 1.0 вийшов у 2008 році на HTC Dream. Ключові віхи: Android 4.0 Ice Cream Sandwich (єдиний UI для телефонів і планшетів), Android 5.0 Lollipop (Material Design), Android 6.0 (дозволи runtime), Android 10 (темна тема, жести), Android 12 (Material You). З 2023 року Google перейшла на щорічні мажорні релізи без десертних назв.
| Версія Android | Рік | Ключове нововведення |
|---|---|---|
| Android 1.0 | 2008 | Перший реліз на HTC Dream |
| Android 4.0 (ICS) | 2011 | Єдиний дизайн для телефонів і планшетів |
| Android 5.0 (L) | 2014 | Material Design, ART замість Dalvik |
| Android 6.0 (M) | 2015 | Дозволи runtime, режим Doze |
| Android 8.0 (O) | 2017 | Kotlin як офіційна мова |
| Android 10 (Q) | 2019 | Scoped Storage, темна тема |
| Android 12 (S) | 2021 | Material You, Privacy Dashboard |
| Android 15 | 2024 | Private Space, супутниковий зв'язок |
Архітектура Android складається з чотирьох основних шарів, що ізолюють апаратне забезпечення від користувацьких застосунків. Кожен шар використовує сервіси нижчого шару через строго визначені інтерфейси.
Нижній шар — модифіковане ядро Linux (LTS, версія 6.x в Android 15). Воно забезпечує управління пам'яттю, процесами, мережевим стеком і драйверами. Hardware Abstraction Layer (HAL) надає єдиний API для взаємодії з обладнанням: камера, Bluetooth, Wi-Fi, сенсори. Виробники реалізують HAL-модулі, не зачіпаючи верхні шари.
ART виконує DEX-байткод застосунків. Починаючи з Android 5.0, ART замінив Dalvik і використовує Ahead-of-Time (AOT) компіляцію для підвищення продуктивності. Кожен застосунок має власний процес з окремим екземпляром ART. Збирання сміття (GC) працює з мінімальними паузами — типовий GC pause становить 2–4 мс.
Framework — шар, з яким безпосередньо працює розробник. Включає Activity Manager (стек екранів), Content Providers (доступ до даних), Resource Manager (локалізація, ресурси), Notification Manager, Location Manager. Всі системні сервіси викликаються через Binder IPC — механізм міжпроцесної взаємодії Android.
// Приклад роботи з Binder через AIDL-інтерфейс
interface IDataService : android.os.IInterface {
fun getData(): List<DataItem>
fun saveData(item: DataItem): Boolean
}
// Реалізація сервісу
class DataService : Service() {
private val binder = object : IDataService.Stub() {
override fun getData(): List<DataItem> = repository.getAll()
override fun saveData(item: DataItem): Boolean = repository.save(item)
}
override fun onBind(intent: Intent?): IBinder = binder
}Верхній шар — стандартні системні застосунки: Телефон, Контакти, Камера, Налаштування, Браузер. Вони не мають привілеїв вищих за користувацькі, але можуть бути замінені сторонніми застосунками. В Android 15 системні застосунки оновлюються через Google Play System Updates незалежно від OTA-оновлень виробника.
Kotlin — статично типізована мова програмування від JetBrains, що працює поверх JVM. Google оголосила Kotlin офіційною мовою Android у 2017 році на Google I/O. Kotlin повністю сумісний з Java, але усуває її недоліки: null-safety, data класи, функції-розширення та корутини.
Головна особливість Kotlin — вбудований захист від NullPointerException. Типи розділені на nullable (String?) та non-null (String). Компілятор перевіряє nullable-доступ на етапі збірки. Safe call (?.) та Elvis-оператор (?:) спрощують роботу з опціональними значеннями без вкладених перевірок.
// Приклад Kotlin-коду з корутинами та Flow
data class User(
val id: Long,
val name: String,
val email: String
)
class UserRepository(
private val api: UserApi,
private val dao: UserDao
) {
suspend fun getUser(id: Long): Result<User> {
return try {
val cached = dao.getUser(id)
if (cached != null) {
return Result.success(cached)
}
val remote = api.fetchUser(id)
dao.insertUser(remote)
Result.success(remote)
} catch (e: Exception) {
Result.failure(e)
}
}
fun observeUsers(): Flow<List<User>> {
return dao.observeAll()
.map { list -> list.sortedBy { it.name } }
.flowOn(Dispatchers.Default)
}
}Приклад демонструє корутини (suspend function) для асинхронного доступу до мережі та бази даних, Flow для реактивного спостереження за змінами даних та Result для безпечної обробки помилок. Корутини замінюють callbacks та RxJava без накладних витрат на потоки.
Корутини Kotlin — це легковагові потоки, що запускаються на спільному пулі потоків. Dispatchers.IO для мережі та диска, Dispatchers.Main для UI, Dispatchers.Default для CPU-інтенсивних завдань. viewModelScope та lifecycleScope автоматично скасовують корутини при знищенні компонента.
// ViewModel з корутинами та StateFlow
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
private val _users = MutableStateFlow<List<User>>(emptyList())
val users: StateFlow<List<User>> = _users.asStateFlow()
private val _loading = MutableStateFlow(false)
val loading: StateFlow<Boolean> = _loading.asStateFlow()
init {
viewModelScope.launch {
repository.observeUsers().collect { userList ->
_users.value = userList
}
}
}
fun refresh() {
viewModelScope.launch {
_loading.value = true
repository.getUser(42).onSuccess { user ->
_users.value = listOf(user)
}
_loading.value = false
}
}
}Android Studio — офіційна IDE на базі IntelliJ IDEA, розроблена Google. Включає редактор коду, Layout Inspector, емулятор пристроїв, APK Analyzer, Profiler (CPU, Memory, Network, Energy) та інтеграцію з Firebase. Android Studio 2024 (Ladybug) підтримує Kotlin 2.0 з мультиплатформенним режимом KMP.
Android Emulator використовує KVM (Linux) або Hyper-V (Windows) для апаратного прискорення. Підтримує симуляцію GPS, датчиків, камери, дзвінків та SMS. Google Pixel 9 Pro — рекомендована конфігурація для тестування з API 35 та 8 ГБ RAM емулятора.
Profiler у реальному часі відображає завантаження CPU, виділення пам'яті, мережеві запити та енергоспоживання. Memory Profiler дозволяє дампити heap та аналізувати витоки через reference tree. Network Inspector записує всі HTTP/HTTPS запити з тілом та заголовками. Для глибокого аналізу використовується Android Studio Canary.
Android-застосунок складається з чотирьох типів компонентів, кожен з яких має власну точку входу та життєвий цикл. Компоненти реєструються в маніфесті AndroidManifest.xml.
| Компонент | Призначення | Точка входу |
|---|---|---|
| Activity | Екран з UI для взаємодії з користувачем | Intent з Action.MAIN та категорією LAUNCHER |
| Service | Фонове виконання завдань без UI | startService() або bindService() |
| BroadcastReceiver | Прийом системних або кастомних подій | Реєстрація в маніфесті або в коді |
| ContentProvider | Управління доступом до структурованих даних | URI через ContentResolver |
Activity — базовий компонент користувацького інтерфейсу. Кожен екран — окрема Activity або Fragment всередині Activity. Навігація між екранами виконується через Intent — об'єкт, що містить дію (ACTION_VIEW, ACTION_SEND) та дані (URI). У Jetpack Navigation Graph навігація описується в XML.
Service виконує фонові завдання, але починаючи з Android 8, фонові служби обмежені. WorkManager — рекомендована бібліотека для відкладених і гарантованих фонових завдань з підтримкою ланцюжків, обмежень (наприклад, тільки при зарядці) та перезапуску після крашу.
Вибір між Jetpack Compose та традиційною XML-версткою — головне архітектурне рішення при старті Android-проєкту. XML Layouts (RecyclerView, ConstraintLayout, FrameLayout) — стандарт з 2008 року. Jetpack Compose представлений у 2021 році як декларативна альтернатива.
| Критерій | XML Layouts | Jetpack Compose |
|---|---|---|
| Парадигма | Імперативна (View tree) | Декларативна (@Composable функції) |
| Мінімальна версія | Будь-яка (API 1+) | API 21+ (Android 5.0) |
| Верстка | XML + data binding / ViewBinding | Kotlin-код з Modifier |
| RecyclerView аналог | RecyclerView + Adapter + ViewHolder | LazyColumn / LazyGrid |
| Preview | XML Preview в Android Studio | @Preview анотація з інтерактивністю |
| Рекомпозиція | notifyDataSetChanged (повна) | Автоматична, точкова (DiffUtil) |
| Інтероперабельність | Повна (всі бібліотеки) | ComposeView в XML / AndroidView в Compose |
Google рекомендує Jetpack Compose для всіх нових проєктів. XML Layouts залишаються актуальними для підтримки легасі-проєктів та для випадків, коли потрібна максимальна кастомізація View (Canvas, SurfaceView). Compose-код в середньому на 40% коротший за еквівалентний XML + ViewBinding.
// Jetpack Compose — екран профілю користувача
@Composable
fun ProfileScreen(
user: User,
onEditClick: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
AsyncImage(
model = user.avatarUrl,
contentDescription = "Аватар пользователя",
modifier = Modifier
.size(120.dp)
.clip(CircleShape)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = user.name,
style = MaterialTheme.typography.headlineMedium
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.height(24.dp))
Button(onClick = onEditClick) {
Icon(Icons.Default.Edit, contentDescription = null)
Spacer(modifier = Modifier.width(8.dp))
Text("Редактировать профиль")
}
}
}
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
MaterialTheme {
ProfileScreen(
user = User(1, "Анна Петрова", "anna@example.com"),
onEditClick = {}
)
}
}Функція ProfileScreen оголошена як @Composable — вона описує UI декларативно, без створення екземплярів View. Compose автоматично оновлює екран при зміні user. @Preview показує результат прямо в IDE без збірки та запуску на емуляторі.
Кожна Activity в Android проходить через шість станів життєвого циклу: onCreate, onStart, onResume, onPause, onStop, onDestroy. Fragment додає onAttach, onCreateView, onViewCreated. Розуміння життєвого циклу критичне для управління пам'яттю та запобігання витокам.
onCreate — викликається один раз при створенні Activity. Тут виконується ініціалізація: setContentView, налаштування адаптерів, підписка на LiveData. onResume — Activity на передньому плані та взаємодіє з користувачем. onPause — Activity втрачає фокус (діалог, інша Activity). onStop — Activity не видна. onDestroy — Activity знищується.
// Activity з обробкою життєвого циклу через LifecycleScope
class MainActivity : ComponentActivity() {
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.users.collect { users ->
updateUi(users)
}
}
}
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("last_search", searchQuery)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
searchQuery = savedInstanceState.getString("last_search", "")
}
}Використання repeatOnLifecycle гарантує, що збір даних призупиняється, коли Activity йде у фон, і відновлюється при поверненні на передній план. Це запобігає витокам та зайвим мережевим запитам. onSaveInstanceState зберігає тимчасовий стан при повороті екрану.
Google Play — офіційний магазин застосунків Android. Реєстрація акаунта розробника коштує $25 разово. Кожен застосунок проходить автоматичну перевірку Google Play Integrity на наявність шкідливого коду, порушень політик та некоректного використання permissions.
Google вимагає підпис застосунку через Android App Bundle (AAB) або APK. AAB — рекомендований формат, що дозволяє генерувати оптимізовані APK для кожної конфігурації пристрою. Застосунок повинен бути підписаний ключем (keystore) з валідним сертифікатом. Google Play App Signing — опціональне шифрування ключа на стороні Google.
Всі застосунки, що запитують доступ до особистих даних, зобов'язані надати політику конфіденційності (Privacy Policy). З 2024 року Google вимагає декларувати Data Safety — форму із зазначенням типів зібраних даних та цілей обробки. Застосунки для Android 14+ повинні використовувати Declarations API для оголошення дозволів.
| Вимога | Опис |
|---|---|
| Android App Bundle | Формат AAB для оптимізованої доставки |
| Data Safety | Форма про збір та обробку персональних даних |
| Target SDK | Застосунок повинен targeting останній API рівень Android |
| Content Rating | Анкета вікового рейтингу |
| Store Listing | Назва, іконка, скріншоти, опис |
Часто задавані питання
Kotlin — офіційно рекомендована мова Google для Android. Java також підтримується для легасі-проєктів. Kotlin пропонує нульову безпеку, корутини та extension-функції, скорочуючи обсяг коду на 30–40% порівняно з Java.
Jetpack Compose рекомендується для всіх нових проєктів завдяки декларативному синтаксису та автоматичній оптимізації рекомпозиції. XML Layouts залишаються в легасі-проєктах та випадках, коли потрібна точкова кастомізація Canvas або SurfaceView.
Реєстрація розробника Google Play коштує $25 разово. Комісія магазину — 15% для перших $1 млн доходу, далі 30%. Для підписок комісія 15% з першого дня. Немає щорічної плати на відміну від Apple Developer Program.
Android Jetpack — набір бібліотек Google, що входять до офіційного SDK: Navigation (навігація), Room (SQLite ORM з compile-time перевіркою запитів), WorkManager (гарантовані фонові завдання), ViewModel (управління станом), LiveData та StateFlow для реактивності.
Мінімальна підтримувана версія — API 24 (Android 7.0) для нових проєктів. AndroidManifest.xml описує компоненти та права застосунку. APK/AAB підписується keystore. Target SDK повинен відповідати останньому API-рівню на момент публікації.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.