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

Android SDK Manager большинство разработчиков встречает лишь однажды — внутри Android Studio, чтобы тут же забыть о его существовании. А потом внезапно падает CI с ошибкой «SDK location not found», Docker-образ раздувается до гигабайтов, а сборка требует конкретный build-tools, которого на сервере нет. Консольный sdkmanager решает эти проблемы: тянет только нужные пакеты, работает без графики и легко скриптуется.
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 — сам бинарник виртуальной машины.
Выбор способа установки зависит от задачи. Для локальной разработки проще всего Android Studio: Settings → Languages & Frameworks → Android SDK, где те же вкладки, что и у старого SDK Manager. Все ставится автоматически, переменные среды прописываются за вас. Для серверов же нужны автономные cmdline-tools: скачивается zip и распаковывается вручную. Критичный момент, на котором валятся почти все — sdkmanager ждет структуру cmdline-tools/latest/bin, а не просто распакованную папку.
Установка на Linux или macOS выглядит так: создаете директорию ~/android-sdk/cmdline-tools, скачиваете туда архив, переименовываете распакованную папку в latest и прописываете переменные среды в ~/.bashrc или ~/.zshrc:
- ANDROID_HOME — указывает на корень SDK.
- PATH — добавляет пути к cmdline-tools/latest/bin и platform-tools.
На macOS есть brew install --cask android-commandlinetools, на Windows — choco install android-sdk. В Debian и Ubuntu пакета sdkmanager в репозиториях нет, поэтому либо ручной zip, либо Docker-образ.
Синтаксис sdkmanager простой: sdkmanager <флаги> [пакеты]. Идентификаторы пишутся через точку с запятой и находятся через --list. Базовые команды, которые реально нужны в работе:
- sdkmanager --list — все доступное плюс установленное.
- sdkmanager --list_installed — только то, что уже стоит.
- sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" — установка конкретного набора.
- yes | sdkmanager --licenses — принятие лицензий, без которых в CI сборка встанет намертво.
- sdkmanager --sdk_root=/opt/android-sdk "platform-tools" — установка в нестандартный путь.
В Docker никогда не запускайте sdkmanager --licenses в интерактивном режиме — контейнер просто повиснет. Либо прогоняйте через yes |, либо копируйте готовую папку лицензий ~/.android в образ. Для эмулятора в паре с sdkmanager идет avdmanager — он создает виртуальные устройства на основе скачанных system-images.
SDK Manager без правильных переменных бесполезен: Gradle не найдет SDK и упадет на этапе конфигурации. ANDROID_HOME — актуальная переменная, ANDROID_SDK_ROOT — устаревшая, но многие старые скрипты ее все еще ждут. Можно задать обе. Файл local.properties в корне проекта с директивой sdk.dir тоже работает, но его не коммитят в git.
Типичные ошибки, на которых спотыкаются почти все. 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. Минимальный SDK — platform-tools плюс одна платформа плюс build-tools — занимает примерно 1,5–2 ГБ. С образами эмулятора легко уходит за 15 ГБ. Расхождение локального и серверного SDK — источник 80% ситуаций «у меня работает».
Android SDK Manager — тонкая обертка над репозиторием Google, и вся ее сила в предсказуемости. Ставьте cmdline-tools в структуру cmdline-tools/latest, держите один ANDROID_HOME, фиксируйте версии пакетов и принимайте лицензии неинтерактивно. Тогда локальная машина, CI и прод-сборка будут видеть одинаковое окружение, а ошибки вида «SDK location not found» исчезнут из вашей жизни насовсем.


