Android SDK Manager: установка, команды и типичные ошибки

Мобильные ОС (Android/iOS) 19 сентябрь 2026 admin

Android SDK Manager: установка, команды и типичные ошибки

Android SDK Manager — тот самый инструмент, который большинство разработчиков видит первый раз в жизни внутри Android Studio и благополучно забывает. А потом CI падает с ошибкой «SDK location not found», Docker-образ весит гигабайты, а сборка требует конкретный build-tools, которого на сервере нет. Консольный sdkmanager решает это: он тянет только нужные пакеты, ставится без графики и легко скриптуется. Ниже — практический разбор: как поставить cmdline-tools вручную, какие команды реально нужны в работе, чем отличаются способы установки и на каких ошибках спотыкаются почти все. Материал рассчитан на тех, кто уже собирал APK хотя бы раз и хочет навести порядок в окружении.

Что такое Android SDK Manager и из чего состоит SDK

Android SDK Manager — это набор инструментов для загрузки, обновления и удаления пакетов Android SDK. Исторически он существовал как отдельное GUI-приложение, потом переехал внутрь Android Studio, а актуальная версия живёт в консольном пакете cmdline-tools под именем sdkmanager. Именно она используется в CI/CD, Docker и на серверах без дисплея.

Сам SDK — это не монолит, а десятки независимых пакетов. Путаница возникает, когда новичок ставит «Android SDK» одним куском и получает 10 ГБ хлама.

  • platform-tools — adb, fastboot, systrace. То, что нужно каждый день.
  • build-tools — aapt2, d8, zipalign, apksigner. Версия жёстко привязана к AGP и Gradle.
  • platforms;android-34 — конкретный API-уровень, против которого компилируется код.
  • system-images — образы для эмулятора AVD, ставятся отдельно по ABI (x86_64, arm64-v8a).
  • emulator — сам бинарник виртуальной машины.
  • ndk — только если пишете нативный код на C/C++.

Три способа поставить SDK Manager

Выбор способа зависит от задачи. Для локальной разработки проще всего Android Studio, для серверов — автономные cmdline-tools.

1. Через Android Studio (GUI)

Settings → Languages & Frameworks → Android SDK. Внутри те же вкладки, что и у старого SDK Manager: SDK Platforms, SDK Tools, SDK Update Sites. Ставит всё автоматически, переменные среды прописывает за вас.

2. Автономные cmdline-tools (рекомендую для серверов)

Скачивается zip с developer.android.com и распаковывается вручную. Критичный момент, на котором валятся все: sdkmanager ждёт структуру cmdline-tools/latest/bin, а не просто распакованную папку.

# Linux/macOS — ручная установка
mkdir -p ~/android-sdk/cmdline-tools
cd ~/android-sdk/cmdline-tools
curl -O https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip
# переименовываем: sdkmanager ищет именно cmdline-tools/latest/bin
mv cmdline-tools latest

# переменные среды (добавить в ~/.bashrc или ~/.zshrc)
export ANDROID_HOME=$HOME/android-sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH

3. Через пакетные менеджеры

macOS: brew install --cask android-commandlinetools. Windows: choco install android-sdk. Debian/Ubuntu — пакета sdkmanager в репозиториях нет, поэтому либо ручной zip, либо Docker-образ androidsdk/android-30.

Команды sdkmanager, которые реально нужны в работе

Синтаксис простой: sdkmanager <флаги> [пакеты]. Идентификаторы пакетов пишутся через точку с запятой и легко находятся через --list.

sdkmanager --list                       # всё доступное + установленное (с кавычками для Android)
sdkmanager --list_installed             # только то, что уже стоит
sdkmanager --version                    # версия самого sdkmanager

# установка конкретного набора
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"
sdkmanager "system-images;android-34;google_apis;x86_64" "emulator"

# удаление и обновление
sdkmanager --uninstall "build-tools;30.0.3"
sdkmanager --update

# лицензии: без них в CI сборка встанет намертво
yes | sdkmanager --licenses

# установка в нестандартный путь
sdkmanager --sdk_root=/opt/android-sdk "platform-tools"
В Docker никогда не запускайте sdkmanager --licenses в интерактивном режиме — контейнер просто повиснет. Либо прогоняйте через yes |, либо копируйте готовую папку лицензий ~/.android в образ.

Для эмулятора в паре с sdkmanager идёт avdmanager — он создаёт виртуальные устройства на основе скачанных system-images:

avdmanager create avd -n pixel34 -k "system-images;android-34;google_apis;x86_64" -d pixel_6
emulator -avd pixel34 -no-window -no-audio &
adb wait-for-device

Сравнение способов установки и источников SDK

СпособГде братьПлюсыМинусыКому подходит
Android Studio (GUI)jetbrains.com / developer.android.comАвтоматика, JDK в комплекте, подсказкиТяжёлая, ~4–8 ГБ, нужен GUIЛокальная разработка
cmdline-tools (zip)developer.android.com/studioПолный контроль, ~150 МБ, легко скриптуетсяРучная настройка PATH и ANDROID_HOMECI/CD, серверы, Docker
Homebrew / Chocolateybrew, chocoОдна команда, обновление через менеджерВерсия cmdline-tools может отставатьЛокальные машины macOS/Windows
Docker-образhub.docker.com (androidsdk/*)Воспроизводимость бит в бит, изоляцияРазмер образа 2–5 ГБ, кэш слоёвПайплайны, сборка релизов

Переменные среды и ошибки, на которых спотыкаются все

SDK Manager без правильных переменных бесполезен: Gradle не найдёт SDK и упадёт на этапе конфигурации.

  • ANDROID_HOME — актуальная переменная, указывает на корень SDK.
  • ANDROID_SDK_ROOT — устаревшая, но многие старые скрипты её всё ещё ждут. Можно задать обе.
  • local.properties в корне проекта — sdk.dir=/home/user/android-sdk. Этот файл не коммитят в git.
# типичная ошибка CI
# FAILURE: Build failed with an exception.
# > SDK location not found. Define a valid SDK location with an ANDROID_HOME
#   environment variable or by setting the sdk.dir path in local.properties

export ANDROID_HOME=/opt/android-sdk
echo "sdk.dir=$ANDROID_HOME" > local.properties
./gradlew assembleRelease

Разбор частых сообщений об ошибках:

  • Warning: Could not create settings — старый sdkmanager, запущенный не из cmdline-tools/latest/bin. Переименуйте папку.
  • Failed to find package — опечатка в ID. Проверьте точное имя через sdkmanager --list, регистр и точки с запятой важны.
  • Unsupported class file major version — свежие cmdline-tools требуют JDK 17+. Укажите JAVA_HOME явно.
  • Broken pipe / зависание — sdkmanager в контейнере ждёт ввода лицензии. Используйте yes |.
Лицензии в CI/CD лучше принимать один раз и кэшировать папку $HOME/.android между запусками пайплайна. Это экономит минуты на каждом билде и избавляет от мигающих зелёных/красных сборок без изменений в коде.

Практические советы и частые вопросы

  • Пиньте версии пакетов явно: build-tools;34.0.0, а не «последняя». Иначе сборка однажды сломается сама по себе.
  • Не ставьте все platforms подряд — 2–3 актуальных API закрывают 99% задач.
  • После обновления build-tools прогоните ./gradlew clean, кэш AAPT2 бывает битым.
  • Для быстрой проверки окружения достаточно sdkmanager --list_installed и adb version.

Нужен ли Android Studio, если есть sdkmanager? Для навигации по коду и эмулятора — да. Для сборки и CI — нет, хватит cmdline-tools плюс JDK.

Сколько занимает минимальный SDK? platform-tools + одна платформа + build-tools — примерно 1,5–2 ГБ. С образами эмулятора легко уходит за 15 ГБ.

Можно ли обновлять пакеты без ломания проекта? Да, если версии зафиксированы в gradle и в CI используется тот же набор, что локально. Расхождение локального и серверного SDK — источник 80% «у меня работает».

Личное наблюдение автора

Я долго ставил SDK «как получится»: то из Android Studio, то из brew, то докидывал build-tools руками через GUI. Пока не завёл отдельный Docker-образ с зафиксированным списком пакетов и не перенёс туда же принятие лицензий. С тех пор сборки перестали падать по пятницам, а время настройки новой машины сократилось с часа до одной команды. Самое неочевидное открытие: 90% проблем с sdkmanager — это не сам инструмент, а PATH, JAVA_HOME и лишние старые копии SDK в системе, которые Gradle находит раньше нужной.

Короткое резюме

Android SDK Manager — это тонкая обёртка над репозиторием Google, и вся её сила в предсказуемости. Ставьте cmdline-tools в структуру cmdline-tools/latest, держите один ANDROID_HOME, фиксируйте версии пакетов и принимайте лицензии неинтерактивно. Тогда локальная машина, CI и прод-сборка будут видеть одинаковое окружение, а ошибки вида «SDK location not found» исчезнут из вашей жизни насовсем.

Редакция «ИТ Фишки»
Качественные материалы о софте, технологиях и гаджетах
Ссылка на материал
Поделиться:
Похожие публикации
Комментарии (0)

© Copyright © 2026. Все права защищены.