
Что такое 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_HOME | CI/CD, серверы, Docker |
| Homebrew / Chocolatey | brew, 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» исчезнут из вашей жизни насовсем.