Вимога Google Play щодо цільового рівня API 36 означає, що реліз, зібраний під версію, нижчу за Android 16, опублікувати не вдасться. Станом на жовтень 2026 року Play відхиляє кожен новий застосунок і кожне оновлення з нижчим цільовим рівнем, часто з повідомленням Target SDK of artifact is too low. Застосунки, які отримали попередження про порушення правил, могли попросити більше часу, але продовження закінчується 1 листопада 2026 року. У цьому посібнику пояснюємо, що ще дає продовження, як перевести Expo, Flutter і React Native на API 36 і що зазвичай ламається після переходу.
Що саме блокує вимога щодо цільового рівня API 36?
Вона блокує надсилання. З 31 серпня 2026 року не можна завантажити новий застосунок для телефона чи оновлення, якщо вони не орієнтовані на API 36. Застосунки, які вже опубліковані й орієнтовані на API 35 або вище, залишаються повністю доступними, зокрема для нових користувачів.
Згідно з вимогами Google щодо цільового рівня API, «нові застосунки та оновлення застосунків мають бути орієнтовані на Android 16 (рівень API 36) або вище, щоб їх можна було надіслати в Google Play». Вимоги відрізняються залежно від типу пристрою, а єдиний повний виняток стосується постійно приватних застосунків, призначених для внутрішнього розповсюдження в межах однієї організації.
| Тип пристрою | Нові застосунки та оновлення (з 31 серпня 2026 р.) | Наявні застосунки залишаються повністю доступними, якщо орієнтовані на |
|---|---|---|
| Телефон, планшет, Android Auto | API 36 | API 35 або вище |
| Wear OS | API 35 | API 34 або вище |
| Android Automotive OS | API 35 | API 32 або вище |
| Android TV | API 34 | API 33 або вище |
| Android XR | API 34 | API 34 або вище |
Наявний застосунок, нижчий за ці рівні, «буде доступний лише на пристроях з ОС Android тієї самої або нижчої версії, ніж цільовий рівень API вашого застосунку». Ті, хто вже встановив його, користуються ним, як і раніше. Проте користувач новішого телефона побачить повідомлення, що застосунок «створено для старішої версії Android».
Чи можна ще отримати продовження до 1 листопада 2026 року?
Лише якщо Play надіслав вашому застосунку попередження про порушення правил і форма запиту для нього досі відображається. Навіть тоді продовження діє щонайпізніше до 1 листопада 2026 року, тож це кілька додаткових днів для майже готового виправлення, а не новий план.
Google зазначає, що надсилає застосункам, яких це стосується, «посилання на форму запиту продовження через їхні сповіщення» і що форма «доступна на сторінці з подробицями попередження або проблеми на сторінці Policy status». Застосункам, які вже відповідають вимогам, Google форму не показує.
- Відкрийте Play Console і виберіть застосунок.
- Знайдіть у вхідних (Inbox) або сповіщеннях (Notifications) повідомлення про цільовий рівень API. Якщо воно є, перейдіть за посиланням у ньому.
- Якщо ні, відкрийте Policy status, перейдіть до попередження чи проблеми щодо цільового рівня API і пошукайте форму запиту продовження на сторінці з подробицями.
- Заповніть форму для кожного застосунку, якого це стосується. Кожен застосунок має власне попередження.
- Незалежно від того, чи схвалять продовження, плануйте завантажити збірку з API 36 до 1 листопада 2026 року. Після цієї дати для оновлень потрібен API 36.
Як перевести Expo, Flutter і React Native на API 36?
Найчистіший шлях — оновитися до версії фреймворку, яка вже орієнтована на API 36: Expo SDK 54, React Native 0.81 або Flutter 3.38. Якщо поки що оновитися не можете, число можна підняти вручну, але тоді зміни поведінки Android 16 доведеться опрацьовувати самостійно.
| Стек | Орієнтується на API 36 за замовчуванням починаючи з | Де задається число | Ручний шлях, якщо оновитися не можна |
|---|---|---|---|
| Expo (managed / CNG) | SDK 54 (React Native 0.81) | Генерується під час prebuild; перевизначається через expo-build-properties | targetSdkVersion: 36 і compileSdkVersion: 36 у плагіні expo-build-properties |
| React Native (bare) | 0.81 | android/build.gradle | Встановіть compileSdk і targetSdk на 36, потім вимкніть predictive back у маніфесті |
| Flutter | 3.38 (flutter.targetSdkVersion = 36) | android/app/build.gradle(.kts) | Замініть жорстко прописане 35 на 36 або на flutter.targetSdkVersion |
Expo. У журналі змін SDK 54 сказано, що SDK 54 і React Native 0.81 «тепер орієнтовані на Android 16». Оновіться командою npx expo install expo@^54.0.0 --fix, запустіть npx expo-doctor@latest, а якщо використовуєте Continuous Native Generation, «видаліть каталоги android та ios, якщо ви згенерували їх для попередньої версії SDK». На SDK 53 можна спробувати встановити targetSdkVersion: 36 через плагін expo-build-properties, але React Native 0.79 досі обробляє дію «назад» через onBackPressed, тож прочитайте наступний розділ, перш ніж це випускати.
Flutter. У примітках до випуску Flutter 3.38 значеннями за замовчуванням указано flutter.compileSdkVersion (API 36) і flutter.targetSdkVersion (API 36), а також «наполегливо рекомендовано використовувати у файлах збірки змінні рівня API, які надає Flutter SDK». Версії 3.38 також потрібна щонайменше Java 17. Якщо у модулі застосунку жорстко прописано targetSdk = 35, оновлення Flutter цього не змінить, тож перевірте файл.
Bare React Native. Встановіть compileSdkVersion і targetSdkVersion на 36 в android/build.gradle. На 0.81 і новіших цього здебільшого достатньо. На старіших версіях також додайте android:enableOnBackInvokedCallback="false" до <application> в AndroidManifest.xml. Без цього апаратна кнопка «назад» і жест «назад» оминатимуть вашу JavaScript-навігацію.
Що ламається, коли застосунок починає орієнтуватися на Android 16?
Найчастіше ламаються навігація «назад» і макети для великих екранів. Коли цільовим є API 36, Android перестає викликати onBackPressed, не дозволяє відмовитися від edge-to-edge і ігнорує блокування орієнтації та зміни розміру на дисплеях завширшки щонайменше 600dp.
Зміни, найважливіші для кросплатформних застосунків, згідно з документом Google «Зміни поведінки в Android 16»:
- Predictive back: «
onBackPressedбільше не викликається, аKeyEvent.KEYCODE_BACKбільше не надсилається». Налаштуванняandroid:enableOnBackInvokedCallback="false"— тимчасовий спосіб відмовитися. - Edge-to-edge:
windowOptOutEdgeToEdgeEnforcement«застарілий і вимкнений», тож заголовок або нижня кнопка можуть опинитися під рядком стану чи панеллю жестів. - Великі екрани: на дисплеях завширшки від 600dp обмеження
screenOrientation,resizableActivityі співвідношення сторін ігноруються, через що макети лише для портретної орієнтації можуть розтягуватися. Ігри є винятком.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY— тимчасовий спосіб відмовитися, який «не діятиме при орієнтації на рівень API 37». - Текст:
elegantTextHeightігнорується, що може змінити висоту рядка для арабської, тайської, тамільської та кількох інших писемностей. - Датчики здоров'я:
BODY_SENSORSзамінено детальнішими дозволами на дані про здоров'я, як-отREAD_HEART_RATE.
З чим стикнулися інші розробники під час переходу на API 36?
Публічні звіти поки що показують два типи проблем: поведінка кнопки «назад», яка змінюється без жодної помилки, і бібліотеки, через які цільовий рівень у бандлі, що отримує Play, відрізняється від указаного у файлах проєкту.
Audius (React Native 0.79). У pull request #14635 команда Audius пише, що Google Play відхилив обидва завантаження Android-версії 1.5.186 з повідомленням Target SDK of artifact is too low. Вони підняли compileSdk і targetSdk з 35 до 36, встановили build tools на 36.0.0 і додали android.suppressUnsupportedCompileSdk=36, бо «RN 0.79 фіксує AGP 8.8». Також вони встановили enableOnBackInvokedCallback="false", оскільки без цього дія «назад» «оминала б React Navigation». Пізніший PR прибрав цей параметр після переходу на React Native 0.81, який сам реєструє OnBackPressedCallback.
Застосунок на Flutter 3.35.2. У Flutter issue #174516 розробник встановив targetSdk 36 у Gradle і маніфесті, але Play Console досі повідомляв: "Your bundle targets SDK 34, but uses a Play Core library that cannot be used with that version." Видалення старої бібліотеки com.google.android.play:core:1.10.3 спричинило помилки R8 "Missing classes". Їх виправлення призвело до "You can't rollout this release because it doesn't allow any existing users to upgrade to the newly added app bundles." Зрештою бандл прийняли після того, як розробник додав правила ProGuard keep, явно задав minSdk і вимкнув розбиття за мовою, щільністю та ABI — ціною більшого розміру завантаження.
Спільний висновок: зміна числа в Gradle не завершує роботу. Audius довелося виправляти поведінку під час виконання, а розробнику Flutter — залежність, яка змінювала те, що Play зчитував із бандла. Перевіряйте зібраний артефакт і тестуйте на пристрої з Android 16, а не лише файл конфігурації.
Як перевірити збірку з API 36 перед завантаженням?
Зчитайте цільовий рівень безпосередньо з релізного бандла, потім завантажте бандл на внутрішній або закритий тестовий трек і перевірте навігацію «назад», відступи та планшетний макет на Android 16. Відхилення чи баг у продакшені коштують значно більше часу, ніж ці перевірки.
Приклад: застосунок на Expo SDK 53, орієнтований на API 35, якому потрібне ще одне оновлення.
- Виконайте
npx expo install expo@^54.0.0 --fix, потімnpx expo-doctor@latest, і виправте все, про що він повідомить. - Якщо проєкт використовує Continuous Native Generation, видаліть старі папки
androidтаiosі зберіть проєкт заново. Інакше внесіть нативні зміни для оновлення вручну. - Зберіть релізний AAB, наприклад командою
eas build -p android --profile production. - Перевірте цільовий рівень командою
bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersion. Вона має вивести36. - Завантажте збірку на внутрішнє тестування. На телефоні з Android 16 натисніть «назад» на кожному вкладеному екрані, перевірте, що заголовки й нижні кнопки не ховаються під системними панелями, і поверніть планшет або емулятор зі змінним розміром.
- Опублікуйте в продакшн із примітками до випуску, де згадано виправлення для Android 16.
Щоб пришвидшити тестування, скористайтеся налаштуванням тестувальників із нашого посібника із закритого тестування в Google Play, а формулювання для тексту оновлення візьміть із наших прикладів приміток до випуску. Якщо хочете передати реліз комусь іншому, наша послуга публікації в App Store охоплює Play Console і App Store Connect за $599 для обох магазинів. Плата за акаунти розробника — окремо.
Поширені запитання
Що буде, якщо я пропущу продовження до 1 листопада 2026 року щодо цільового рівня API?
Ваша поточна сторінка в магазині залишиться. Застосунок для телефона, орієнтований на API 35 або вище, і далі доступний наявним і новим користувачам. Play Console відхилятиме будь-який новий реліз, навіть термінові виправлення багів, доки бандл не буде орієнтований на Android 16 (API 36). Застосунки нижче API 35 можна встановити лише на пристрої з відповідною або старішою версією Android.
Чи мають застосунки для Wear OS і Android TV орієнтуватися на API 36?
Ні. Станом на жовтень 2026 року нові застосунки та оновлення для Wear OS і Android Automotive OS мають орієнтуватися на API 35, а застосунки для Android TV і Android XR — на API 34. API 36 потрібен лише застосункам для телефонів, планшетів і Android Auto. Єдиний повний виняток — постійно приватний застосунок, що розповсюджується в межах однієї організації.
Чи можна орієнтуватися на API 36, не оновлюючи Expo SDK?
На SDK 53 можна встановити targetSdkVersion і compileSdkVersion на 36 у плагіні expo-build-properties, і деякі розробники так зробили. React Native 0.79, який використовує SDK 53, досі передає натискання «назад» через onBackPressed, а Android 16 при API 36 його більше не викликає. Вам довелося б відмовитися від нової поведінки, встановивши enableOnBackInvokedCallback у false. Підтримуваний шлях — оновлення до SDK 54.
У чому різниця між compileSdkVersion і targetSdkVersion?
compileSdkVersion — це версія Android API, з якою компілюється ваш код. targetSdkVersion повідомляє Android, поведінку якої версії перейняв ваш застосунок, і саме її перевіряє Google Play. compileSdk має дорівнювати targetSdk або бути вищим, тож перехід на цільовий 36 означає компіляцію з API 36 або новішим. Наприклад, Expo SDK 58 компілюється з API 37 і орієнтується на 36.
Чому Play Console досі показує старіший цільовий рівень API після того, як я змінив build.gradle?
Play зчитує цільовий рівень із бандла, який ви завантажуєте, а не з вихідних файлів. Жорстко прописане значення в іншому модулі, застарілий плагін або бібліотека на кшталт старої Play Core можуть змінити об'єднаний маніфест. Виконайте bundletool dump manifest для релізного AAB, щоб побачити справжнє значення targetSdkVersion, і переконайтеся, що завантажили нову збірку, а не старий артефакт.
Джерела та додаткові матеріали
Правила змінюються. Перед публікацією перевірте офіційну документацію.
- Вимоги щодо цільового рівня API для застосунків Google Play (Довідка Play Console) ↗Перевірено 30 жовт. 2026 р.
- Зміни поведінки: застосунки, орієнтовані на Android 16 або вище (Android Developers) ↗Перевірено 30 жовт. 2026 р.
- Журнал змін Expo SDK 54 ↗Перевірено 30 жовт. 2026 р.
- Що нового у Flutter 3.38 ↗Перевірено 30 жовт. 2026 р.
- fix(mobile): target Android SDK 36, AudiusProject/apps PR #14635 ↗Перевірено 30 жовт. 2026 р.
- Flutter 3.35.2 примусово використовує SDK 34 попри явні перевизначення, flutter/flutter issue #174516 ↗Перевірено 30 жовт. 2026 р.
Доведімо ваш застосунок до фінішу.
Предметний дзвінок, щоб з’ясувати, що стоїть між вашим застосунком і опублікованою сторінкою в магазині.
Записатися на дзвінок ↗

