Android Cmdline Tools: полное руководство по установке и использованию

Ошибка 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.

☑️ Проверка структуры каталогов

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

Настройка переменных окружения

Чтобы команды работали из любого каталога, необходимо задать переменную 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.
📊 Где вы используете Android cmdline tools?
Локальная разработка без Android Studio
CI/CD и автоматическая сборка
Docker-контейнеры
Настраиваю впервые

Установка необходимых пакетов через 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Установка и обновление пакетов SDKcmdline-tools/latest/bin
avdmanagerСоздание виртуальных устройствcmdline-tools/latest/bin
adbВзаимодействие с устройством и эмуляторомplatform-tools
emulatorЗапуск созданных AVDemulator
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 — например, на сборочных серверах или в контейнерах.