Перейти до вмісту
Оновлення застосунків

Цільовий API 36 у Google Play: продовження до 1 листопада 2026 і перехід для Expo, Flutter та React Native

Пропустили дедлайн 31 серпня? Дізнайтеся, що ще дає продовження до 1 листопада 2026 року, і переведіть Expo, Flutter або React Native на API 36, не зламавши навігацію «назад» і макети.

Коротка відповідь

Правило про цільовий рівень API 36 означає, що з 31 серпня 2026 року кожен новий застосунок і кожне оновлення, надіслані в Google Play, мають бути орієнтовані на Android 16 (API 36). Розробники, чиї застосунки отримали попередження про порушення правил, могли запросити продовження до 1 листопада 2026 року на сторінці Policy status. Коли продовження закінчиться, Play блокуватиме оновлення, доки ви не завантажите збірку з targetSdk 36. Expo SDK 54+, Flutter 3.38+ і React Native 0.81+ за замовчуванням орієнтуються на API 36.

Головне
  • З 31 серпня 2026 року нові застосунки та оновлення в Google Play мають бути орієнтовані на Android 16 (рівень API 36). Для Wear OS і Automotive потрібен API 35, для Android TV і XR — API 34.
  • Продовження діє лише до 1 листопада 2026 року. Посилання на форму запиту отримують застосунки, що не відповідають вимогам, через сповіщення Play Console та сторінку попередження в Policy status.
  • Якщо наявний застосунок для телефона орієнтований на API 35 або вище, він залишається доступним для нових користувачів. Пропущений дедлайн зупиняє ваші оновлення, а не поточну сторінку застосунку.
  • Expo SDK 54 (React Native 0.81) і Flutter 3.38 за замовчуванням орієнтуються на API 36. Оновлення фреймворку зазвичай працює краще, ніж ручна зміна числа.
  • Коли застосунок орієнтований на API 36, Android більше не викликає onBackPressed і ігнорує блокування орієнтації на екранах завширшки від 600dp. Перевірте навігацію «назад» і планшетні макети перед завантаженням.
API 36 або жодних оновлень

Вимога 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 AutoAPI 36API 35 або вище
Wear OSAPI 35API 34 або вище
Android Automotive OSAPI 35API 32 або вище
Android TVAPI 34API 33 або вище
Android XRAPI 34API 34 або вище

Наявний застосунок, нижчий за ці рівні, «буде доступний лише на пристроях з ОС Android тієї самої або нижчої версії, ніж цільовий рівень API вашого застосунку». Ті, хто вже встановив його, користуються ним, як і раніше. Проте користувач новішого телефона побачить повідомлення, що застосунок «створено для старішої версії Android».

Чи можна ще отримати продовження до 1 листопада 2026 року?

Лише якщо Play надіслав вашому застосунку попередження про порушення правил і форма запиту для нього досі відображається. Навіть тоді продовження діє щонайпізніше до 1 листопада 2026 року, тож це кілька додаткових днів для майже готового виправлення, а не новий план.

Google зазначає, що надсилає застосункам, яких це стосується, «посилання на форму запиту продовження через їхні сповіщення» і що форма «доступна на сторінці з подробицями попередження або проблеми на сторінці Policy status». Застосункам, які вже відповідають вимогам, Google форму не показує.

  1. Відкрийте Play Console і виберіть застосунок.
  2. Знайдіть у вхідних (Inbox) або сповіщеннях (Notifications) повідомлення про цільовий рівень API. Якщо воно є, перейдіть за посиланням у ньому.
  3. Якщо ні, відкрийте Policy status, перейдіть до попередження чи проблеми щодо цільового рівня API і пошукайте форму запиту продовження на сторінці з подробицями.
  4. Заповніть форму для кожного застосунку, якого це стосується. Кожен застосунок має власне попередження.
  5. Незалежно від того, чи схвалять продовження, плануйте завантажити збірку з 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-propertiestargetSdkVersion: 36 і compileSdkVersion: 36 у плагіні expo-build-properties
React Native (bare)0.81android/build.gradleВстановіть compileSdk і targetSdk на 36, потім вимкніть predictive back у маніфесті
Flutter3.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, якому потрібне ще одне оновлення.

  1. Виконайте npx expo install expo@^54.0.0 --fix, потім npx expo-doctor@latest, і виправте все, про що він повідомить.
  2. Якщо проєкт використовує Continuous Native Generation, видаліть старі папки android та ios і зберіть проєкт заново. Інакше внесіть нативні зміни для оновлення вручну.
  3. Зберіть релізний AAB, наприклад командою eas build -p android --profile production.
  4. Перевірте цільовий рівень командою bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersion. Вона має вивести 36.
  5. Завантажте збірку на внутрішнє тестування. На телефоні з Android 16 натисніть «назад» на кожному вкладеному екрані, перевірте, що заголовки й нижні кнопки не ховаються під системними панелями, і поверніть планшет або емулятор зі змінним розміром.
  6. Опублікуйте в продакшн із примітками до випуску, де згадано виправлення для 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, і переконайтеся, що завантажили нову збірку, а не старий артефакт.

Джерела та додаткові матеріали

Правила змінюються. Перед публікацією перевірте офіційну документацію.

Приходьте зі збіркою. Або з ідеєю.

Доведімо ваш застосунок до фінішу.

Предметний дзвінок, щоб з’ясувати, що стоїть між вашим застосунком і опублікованою сторінкою в магазині.

Записатися на дзвінок ↗