Android SDK 31: установка, настройка и особенности Android 12

Ошибка сборки 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

Выполнено: 0 / 5

Если вы работаете без графической среды, платформу можно поставить из командной строки через 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 Platform 31?
Сборка собственного приложения
Открытие чужого проекта
Миграция targetSdk на 31
Тестирование на эмуляторе 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" из терминала.