Ошибка сборки failed to find Platform SDK with path: platforms;android-31 появляется в Android Studio, когда в проекте указана compileSdk 31, а сама платформа Android SDK 31 не загружена через SDK Manager. Это самая частая причина, по которой разработчики ищут информацию о «31 sdk android»: система сборки Gradle не может найти набор инструментов для Android 12, и проект отказывается компилироваться.
SDK Platform 31 соответствует операционной системе Android 12 (а обновлённый вариант 31L — Android 12L для планшетов и складных устройств). Понимание того, как эта платформа устанавливается, чем отличается от предыдущих версий и какие изменения API она несёт, необходимо и тем, кто пишет приложения, и тем, кто просто столкнулся с сообщением об отсутствии SDK при открытии чужого проекта.
Что такое Android SDK Platform 31
Каждая версия Android имеет числовой идентификатор уровня API — API Level. Для Android 12 это уровень 31. Пакет SDK Platform 31 включает системные образы, библиотеки android.jar, документацию по API и инструменты, необходимые компилятору для проверки вызовов методов фреймворка.
Важно различать три параметра в файле build.gradle модуля приложения:
- 📦 compileSdk — версия SDK, против которой компилируется код; для использования API Android 12 указывается 31.
- 🎯 targetSdk — целевая версия, декларирующая, что приложение протестировано под Android 12 и учитывает его изменения поведения.
- 📱 minSdk — минимальная версия Android, на которой приложение вообще запустится.
Значение targetSdkVersion 31 стало обязательным для новых приложений и обновлений в Google Play с определённого момента — магазин требует ориентироваться на свежие уровни API. Точные сроки требований меняются, поэтому актуальные даты стоит проверять в официальной документации Google Play для разработчиков.
Как установить SDK Platform 31 через SDK Manager
Установка выполняется штатными средствами Android Studio и не требует ручной загрузки архивов. Откройте Tools → SDK Manager (или нажмите на значок SDK Manager на панели инструментов) и перейдите на вкладку SDK Platforms.
В списке найдите Android 12 (S) — API Level 31. Отметьте галочкой нужные компоненты и нажмите Apply: менеджер скачает платформу и разместит её в каталоге SDK, обычно это Android/Sdk/platforms/android-31 внутри домашней директории пользователя.
☑️ Проверка перед установкой SDK 31
Если вы работаете без графической среды, платформу можно поставить из командной строки через sdkmanager:
sdkmanager "platforms;android-31" "build-tools;31.0.0"
После установки перезапустите синхронизацию Gradle через File → Sync Project with Gradle Files. Если ошибка осталась, проверьте файл local.properties в корне проекта — путь sdk.dir должен указывать на тот каталог, куда реально установлена платформа.
⚠️ Внимание: если проект открыт на другом компьютере или после переустановки системы, файл local.properties может содержать устаревший путь к SDK. Этот файл не хранится в системе контроля версий — его нужно либо удалить (Android Studio создаст заново), либо исправить путь вручную.
Ключевые изменения в API 31 (Android 12)
Android 12 принёс заметные изменения поведения, которые влияют на приложения, переведённые на targetSdk 31. Игнорирование этих нововведений — типичный источник падений после обновления целевой версии.
- 🔔 Точные будильники — для
SCHEDULE_EXACT_ALARMпоявилось требование явного разрешения и проверки доступности. - 📡 Bluetooth-разрешения — вместо старых
BLUETOOTHиBLUETOOTH_ADMINвведены runtime-разрешенияBLUETOOTH_SCAN,BLUETOOTH_CONNECTиBLUETOOTH_ADVERTISE. - 🚀 Экспорт компонентов — атрибут
android:exportedстал обязательным для активностей, сервисов и ресиверов сintent-filter; без него приложение не установится на Android 12. - ⏳ PendingIntent — требуется явно указывать флаг изменяемости:
FLAG_IMMUTABLEилиFLAG_MUTABLE. - 🎨 Splash Screen API — системный экран запуска стал стандартным, кастомные заставки нужно адаптировать.
Отдельного внимания заслуживает Material You — новая дизайн-система с динамическими цветами, подстраивающимися под обои пользователя. Поддержка динамической палитры опциональна, но её реализация заметно улучшает восприятие приложения на устройствах с Android 12.
Типичные ошибки при работе с SDK 31 и их решения
Наиболее распространённые проблемы связаны не с самой платформой, а с окружением сборки. Ниже — сводка частых симптомов и направлений диагностики.
| Ошибка / симптом | Вероятная причина | Что проверить |
|---|---|---|
| failed to find Platform SDK android-31 | Платформа не установлена | SDK Manager → Android 12 (API 31) |
| Installed Build Tools revision is corrupted | Повреждён пакет Build Tools | Переустановить Build Tools 31.0.0 |
| android:exported needs to be explicitly specified | Отсутствует атрибут exported в манифесте | Добавить android:exported к компонентам с intent-filter |
| Требуется более новая версия Gradle/AGP | Несовместимость плагина с compileSdk 31 | Обновить Android Gradle Plugin и Gradle wrapper |
| Licenses not accepted | Не приняты лицензии SDK | Выполнить sdkmanager --licenses |
Отдельно стоит упомянуть совместимость версий: для compileSdk 31 требуется достаточно свежая связка Android Gradle Plugin и Gradle. Точные минимальные версии зависят от релиза плагина — актуальную таблицу совместимости публикует Google в документации для разработчиков. Если после повышения compileSdk проект перестал собираться без явных ошибок кода, первым делом обновите версию плагина в build.gradle уровня проекта и версию Gradle в gradle-wrapper.properties.
Миграция приложения на targetSdk 31: порядок действий
Перевод целевой версии — это не просто смена цифры в конфиге. Корректная последовательность выглядит так. Сначала обновите compileSdk и зависимости библиотек, затем пройдитесь по манифесту и добавьте android:exported, после этого проверьте все места создания PendingIntent и добавьте флаги изменяемости.
Следующий этап — разрешения. Если приложение работает с Bluetooth, замените старые разрешения на новые и добавьте runtime-запросы. Затем протестируйте приложение на реальном устройстве с Android 12 или на эмуляторе с образом API 31: эмулятор создаётся через Tools → Device Manager с выбором системного образа Android 12.
⚠️ Внимание: приложения сtargetSdk 31, в которых PendingIntent создан без флагаFLAG_IMMUTABLEилиFLAG_MUTABLE, падают с исключениемIllegalArgumentExceptionна устройствах с Android 12. На эмуляторе с более старой версией ОС эта ошибка не проявится — тестирование именно на API 31 обязательно.
Что такое Android 12L и API 31L
Android 12L — специальный выпуск для устройств с большими экранами (планшеты, складные смартфоны). Он сохранил API Level 31, но добавил функции адаптивной раскладки. В SDK Manager образы 12L помечены отдельно; для обычных приложений достаточно стандартной платформы 31.
Где хранятся файлы SDK 31 и как управлять местом на диске
Каждая установленная платформа занимает заметный объём: сама платформа, системные образы эмулятора и исходники суммарно требуют гигабайты дискового пространства. Все компоненты лежат в каталоге SDK, путь к которому виден в SDK Manager → Android SDK Location.
Если диск переполнен, удаляйте неиспользуемые платформы и старые системные образы через тот же SDK Manager — простое удаление папок вручную допустимо, но менеджер гарантированно не оставит «висячих» записей. Никогда не удаляйте каталог platform-tools — без него перестанут работать adb и подключение устройств, что затронет все проекты сразу.
Часто задаваемые вопросы
Чем отличается compileSdk 31 от targetSdk 31?
compileSdk определяет, какие API доступны на этапе компиляции, и влияет только на сборку. targetSdk сообщает системе, под поведение какой версии Android адаптировано приложение: именно от него зависит, применяются ли к приложению новые ограничения Android 12 в runtime.
Можно ли собрать проект с compileSdk 31 без Android Studio?
Да. Достаточно установить командные инструменты SDK (command line tools), через sdkmanager поставить платформу и build-tools, принять лицензии и собирать проект через Gradle wrapper из терминала.
Почему приложение падает на Android 12 после смены targetSdk?
Наиболее вероятные причины — PendingIntent без флага изменяемости, отсутствие android:exported у компонентов с intent-filter или использование старых Bluetooth-разрешений. Смотрите стек-трейс в Logcat: он указывает конкретное место ошибки.
Нужно ли скачивать системный образ Android 12 для разработки?
Для компиляции образ не нужен — достаточно SDK Platform. Образ требуется только для запуска эмулятора с Android 12, что необходимо для тестирования поведения targetSdk 31.
Что делать, если SDK Manager не показывает Android 12?
Проверьте, что отключён фильтр устаревших пакетов и обновлена сама Android Studio. В редких случаях помогает переключение канала обновлений или ручная установка через sdkmanager "platforms;android-31" из терминала.