Ошибка sdkmanager: command not found после распаковки архива commandlinetools — самый частый симптом, с которым сталкиваются разработчики при первой попытке настроить Android SDK без Android Studio. Причина почти всегда одна: утилиты лежат не в той структуре каталогов, которую ожидает пакетный менеджер, либо путь к папке bin не добавлен в переменную окружения PATH.
Android Command Line Tools (cmdline-tools) — это официальный набор утилит от Google для управления Android SDK без графической среды разработки. В него входят sdkmanager для установки пакетов, avdmanager для создания эмуляторов и ряд вспомогательных инструментов. Набор незаменим на CI-серверах, в Docker-контейнерах и на машинах, где Android Studio не установлена.
Что входит в состав Command Line Tools
Пакет cmdline-tools заменил устаревший набор SDK Tools и стал единственным поддерживаемым способом управления SDK из терминала. После распаковки архива в каталоге bin находятся исполняемые файлы, а в lib — необходимые библиотеки.
- 🛠️ sdkmanager — установка, обновление и удаление пакетов SDK: платформ, build-tools, системных образов эмулятора.
- 📱 avdmanager — создание и управление виртуальными устройствами (AVD) для эмулятора.
- 📜 sdkmanager --licenses — принятие лицензионных соглашений, без которого сборка проектов невозможна.
- 🔍 sdkmanager --list — просмотр всех доступных для загрузки пакетов и их версий.
Ключевой момент: cmdline-tools — это только «менеджер». Сама платформа android-XX, platform-tools (где находится adb) и build-tools скачиваются отдельно через sdkmanager после первичной установки.
Правильная структура каталогов при установке
Главная ловушка установки — требование к вложенности папок. Утилита sdkmanager определяет корень SDK по своему расположению и ожидает, что исполняемые файлы лежат по пути SDK_ROOT/cmdline-tools/latest/bin/. Если просто распаковать архив в папку SDK, менеджер выдаст предупреждение о неверной структуре или не сможет обновить сам себя.
Корректный порядок действий выглядит так:
mkdir -p ~/Android/Sdk/cmdline-tools
unzip commandlinetools-*.zip -d ~/Android/Sdk/cmdline-tools
mv ~/Android/Sdk/cmdline-tools/cmdline-tools ~/Android/Sdk/cmdline-tools/latest
После этого путь к утилитам станет ~/Android/Sdk/cmdline-tools/latest/bin. Имя каталога latest не обязано быть именно таким — подойдёт любое, но latest позволяет sdkmanager корректно обновлять сам пакет cmdline-tools.
☑️ Проверка структуры каталогов
Настройка переменных окружения
Чтобы команды работали из любого каталога, необходимо задать переменную ANDROID_HOME (или ANDROID_SDK_ROOT) и дописать нужные пути в PATH. На Linux и macOS это делается в файле ~/.bashrc или ~/.zshrc:
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
В Windows путь добавляется через «Система → Дополнительные параметры системы → Переменные среды». Туда же добавляется переменная ANDROID_HOME, указывающая на корень SDK. После правки нужно перезапустить терминал, иначе изменения не подхватятся.
⚠️ Внимание: в путях к SDK не должно быть пробелов и кириллицы — ряд скриптов сборки некорректно обрабатывает такие пути, особенно на Windows. Размещайте SDK в каталоге вида C:\Android\Sdk.
Установка необходимых пакетов через sdkmanager
После настройки PATH первым делом проверьте, что менеджер запускается: выполните sdkmanager --version. Если вместо версии появляется ошибка Java — необходимо установить JDK, так как утилиты написаны на Java и требуют соответствующую среду выполнения.
Типовой набор пакетов для сборки проекта устанавливается одной командой:
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"
Имена пакетов всегда заключаются в кавычки, поскольку содержат точку с запятой. Точный список доступных идентификаторов смотрите через sdkmanager --list — версии платформ и build-tools обновляются, поэтому сверяйтесь с актуальным выводом команды, а не с устаревшими примерами из сети.
Завершающий обязательный шаг — принятие лицензий. Без него Gradle-сборка прервётся с ошибкой о непринятом лицензионном соглашении:
yes | sdkmanager --licenses
Сравнение основных утилит пакета
Новички часто путают назначение утилит, входящих в SDK. Таблица ниже помогает быстро сориентироваться, какая команда за что отвечает.
| Утилита | Назначение | Где находится |
|---|---|---|
| sdkmanager | Установка и обновление пакетов SDK | cmdline-tools/latest/bin |
| avdmanager | Создание виртуальных устройств | cmdline-tools/latest/bin |
| adb | Взаимодействие с устройством и эмулятором | platform-tools |
| emulator | Запуск созданных AVD | emulator |
| apkanalyzer | Анализ содержимого APK-файлов | cmdline-tools/latest/bin |
Типичные ошибки и их решение
Проблемы при работе с cmdline-tools в большинстве случаев сводятся к нескольким повторяющимся сценариям. Разберём самые распространённые.
- ❌ Could not determine SDK root — утилита не видит корень SDK. Проверьте переменную ANDROID_HOME и структуру каталогов с
latest. - ☕ Ошибки Java / UnsupportedClassVersionError — установленная версия JDK не подходит. Проверьте вывод
java -versionи требования в документации к вашей версии инструментов. - 🔒 License not accepted при сборке — выполните
sdkmanager --licensesи подтвердите все соглашения. - 🌐 Сбои загрузки пакетов — проверьте сетевое подключение и настройки прокси; sdkmanager поддерживает параметры
--proxyи--proxy_host.
⚠️ Внимание: не перемещайте и не переименовывайте папки внутри SDK после установки пакетов — пути к компонентам прописываются в конфигурации, и ручное перемещение приведёт к их поломке. Для переноса SDK корректнее переустановить пакеты в новое расположение.
Как проверить, какие пакеты уже установлены
Выполните sdkmanager --list_installed — команда выведет таблицу всех установленных компонентов с версиями и путями. Это удобно для диагностики, когда сборка требует конкретную версию build-tools.
Создание эмулятора без Android Studio
Для запуска эмулятора из командной строки сначала загрузите необходимые компоненты: сам эмулятор и системный образ нужной версии Android:
sdkmanager "emulator" "system-images;android-34;google_apis;x86_64"
Затем создайте виртуальное устройство через avdmanager, указав имя и идентификатор образа:
avdmanager create avd -n test_device -k "system-images;android-34;google_apis;x86_64"
Запуск выполняется командой emulator -avd test_device. Список всех созданных устройств покажет emulator -list-avds. Идентификаторы системных образов зависят от версии Android и архитектуры процессора, поэтому точное имя берите из вывода sdkmanager --list.
Часто задаваемые вопросы
Чем cmdline-tools отличаются от platform-tools?
Cmdline-tools — это менеджер пакетов (sdkmanager, avdmanager), а platform-tools — инструменты взаимодействия с устройствами (adb, fastboot). Оба пакета нужны для полноценной работы, но устанавливаются раздельно.
Можно ли использовать cmdline-tools без установленной Java?
Нет. Утилиты sdkmanager и avdmanager написаны на Java и требуют установленный JDK. Проверить наличие среды можно командой java -version.
Почему sdkmanager просит обновить сам себя?
Google периодически выпускает новые версии cmdline-tools. Обновление выполняется командой sdkmanager --update либо установкой пакета "cmdline-tools;latest" при корректной структуре каталогов.
Где скачать официальный архив cmdline-tools?
Архив распространяется через официальный сайт Android Developers в разделе загрузок командной строки, а также по прямым ссылкам репозитория Google. Сторонние источники использовать не стоит из соображений безопасности.
Нужны ли cmdline-tools, если установлена Android Studio?
Android Studio ставит их автоматически в составе SDK. Отдельная ручная установка требуется только для работы без IDE — например, на сборочных серверах или в контейнерах.