Как установить Android SDK Build Tools в командной строке?

Я хочу настроить среду разработки Android из командной строки и столкнуться со следующей проблемой:

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

после распаковки файла запустите

tools/android update sdk --no-ui

Тем не менее, он работает слишком медленно

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

В результате в папке build-tools ничего нет, а я хочу aapt и apkbuilder, так как я хочу собрать apk из командной строки без ant.

20 ответов

По умолчанию SDK Manager из командной строки не включает инструменты сборки в список. Они в "устаревшей" категории. Чтобы увидеть все доступные загрузки, используйте

android list sdk --all

А затем, чтобы получить один из пакетов в этом списке из командной строки, используйте:

android update sdk -u -a -t <package no.>

Где -u обозначает -no-ui, -a обозначает -all и -t обозначает -filter.

Если вам нужно установить несколько пакетов, сделайте:

Обновление Android SDK -U -a -t 1,2,3,4,.., N 

Где 1,2,..,n - номер пакета, указанный выше с помощью команды list

Как уже упоминалось в других ответах, вы можете использовать --filter Возможность ограничения установленных пакетов:

android update sdk --filter ...

В других ответах не упоминается, что вы можете использовать постоянные строковые идентификаторы вместо индексов (которые будут меняться) для параметров фильтра. Это полезно для автоматической установки или установки по сценарию. Человек для --filter опция:

... Это также принимает идентификаторы, возвращаемые 'list sdk --extended'.

android list sdk --all --extended:

Packages available for installation or update: 97
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 22.6.2
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 19.0.1
----------
id: 3 or "build-tools-19.0.3"
     Type: BuildTool
     Desc: Android SDK Build-tools, revision 19.0.3

Затем вы можете использовать строковые идентификаторы в качестве параметров фильтра, чтобы точно указать версии, которые вы хотите:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 так далее

Версия 25.2.3 (и выше) из Android SDK Tools Пакет содержит новый инструмент - sdkmanager - который упрощает эту задачу установки инструментов сборки из командной строки.
Это находится в android_sdk/tools/bin папка.

Использование (из документации):

sdkmanager packages [options]

packages Аргумент - это путь в стиле SDK, заключенный в кавычки (например, "build-tools;25.0.0" или же "platforms;android-25"). Вы можете передать несколько путей пакета, разделенных пробелом, но каждый из них должен быть заключен в собственный набор кавычек.

Пример использования (на моем Mac):

alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
alex@mbpro:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

Вы также можете указать различные параметры, например, чтобы заставить все соединения использовать HTTP (--no_https) или для использования прокси-сервера (--proxy_host=address а также --proxy_port=port).

Чтобы проверить доступные параметры, используйте --help флаг. На моей машине (Mac) вывод выглядит следующим образом:

alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help
Usage: 
  sdkmanager [--uninstall] [<common args>] \
    [--package_file <package-file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    <package> is a sdk-style path (e.g. "build-tools;23.0.0" or 
             "platforms;android-23").
    <package-file> is a text file where each line is a sdk-style path
                   of a package to install or uninstall.
    Multiple --package_file arguments may be specified in combination
     with explicit paths.
In its second form (with --update), currently installed packages are
    updated to the latest version.
In its third form, all installed and available packages are printed out.

Common Arguments:
    --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK containing this tool
    --channel=<channelId>: Include packages in channels up to <channelId>.
                           Common channels are:
                           0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).

    --include_obsolete: With --list, show obsolete packages in the
                        package listing. With --update, update obsolete
                        packages as well as non-obsolete.
    --no_https: Force all connections to use http rather than https.
    --proxy=<http | socks>: Connect via a proxy of the given type.
    --proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
    --proxy_port=<port #>: Proxy port to connect to.

* If the env var REPO_OS_OVERRIDE is set to "windows",
  "macosx", or "linux", packages will be downloaded for that OS.

Инструменты сборки ADB не будут загружаться автоматически, по команде Android Update SDK --no-ui

Итак, для установки типа Buil-Tool (в консоли):

android list sdk --all

Запомните номер, который указан перед элементом, и выполните следующее:

android update sdk -u --all --filter <number>

Команды должны быть набраны в /YourFolder/android-sdk-linux/tools

Также для удаленной папки (например, сервер, открытый с помощью ssh) введите:

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>

Для простого списка пакетов ADB введите в терминале:

android list sdk

для установки всех пакетов:

android update sdk --no-ui

Или с фильтрами (запятая является разделителем):

android update sdk --no-ui --filter 3,5,8,14

Отличным источником информации, с которой я столкнулся, пытаясь установить все компоненты Android SDK из командной строки, был этот Dockerfile. Внутри Dockerfile вы можете видеть, что автор выполняет одну команду для установки platform tools а также build tools без какого-либо другого взаимодействия. В случае, если OP выдвинул, команда будет адаптирована к:

echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui

Если у вас есть sdkmanager установлен (я использую MAC)

бежать sdkmanager --list перечислить доступные пакеты.

Если вы хотите установить инструменты сборки, скопируйте предпочитаемую версию из списка доступных пакетов.

Чтобы установить предпочитаемую версию, запустите

sdkmanager "build-tools;27.0.3"

Команда "android" устарела.

Для инструментов командной строки используйте tools/bin/sdkmanager и tools/bin/avdmanager.

Если вам не нужна Android Studio, вы можете загрузить основные инструменты командной строки Android с сайта https://developer.android.com/studio в разделе Только инструменты командной строки.

из CLI это должно быть примерно так:

curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

или

wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

После этого просто распакуйте архив в целевую папку

unzip sdk-tools-linux.zip

И теперь мы можем установить все необходимое...

./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

Получить полный список пакетов можно с помощью команды ./tools/bin/sdkmanager --list

Некоторые пакеты требуют принятия лицензионного соглашения. вы можете принять его в интерактивном режиме или просто передать "y" во входной поток, как это (два соглашения в случае):

echo -ne "y\ny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'

И, конечно же, для вашего удобства вы можете экспортировать такие переменные, как ANDROID_HOME или ANDROID_SDK_ROOT (в том числе делать это в ~/.profile или ~/.bash_profile) или исправлять переменную PATH - все это на ваше усмотрение.

Пример скрипта:

mkdir /opt/android-sdk
cd /opt/android-sdk
curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux.zip
echo -ne "y" | ./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

Требования:curl (или wget) и разархивировать

Исправление проблем:

Если ты видишь Warning: Could not create settings, вам нужно иметь tools каталог внутри cmdline-toolsкаталог внутри ANDROID_HOME (при необходимости создайте его с этим точным именем) см. Инструменты командной строки Android sdkmanager всегда показывает: Предупреждение: не удалось создать настройки

У меня было чертовски много времени на установку зависимостей Android SDK через командную строку, и, поскольку документация, которая поставляется вместе с инструментами и онлайн, крайне не хватает, я решил опубликовать то, что обнаружил здесь.

Я работаю с android sdk r24.4.1 за linux, Есть две команды, которые вы можете запустить, чтобы вывести список доступных пакетов:

android list sdk

и тем более исчерпывающим

android list sdk --all

Номера пакетов для конкретных пакетов отличаются для каждой команды выше! Например, бывший список списков API 23.1 revision 3 как пакет #3 и последний перечисляет это как #29,

Теперь есть два способа установки с помощью команды android.

tools/android update sdk --no-ui --filter <package number>

а также

tools/android update sdk -u -a -t <package number>

Учитывая, что каждая команда установки может принять пакет # в качестве параметра, какой номер пакета вы используете? После долгих поисков в Интернете, проб и ошибок я обнаружил, что

android update sdk --no-ui --filter использует номера пакетов из android list sdk

а также

android update sdk -u -a -t использует номера пакетов из android list sdk --all

Другими словами - установить API 23.1 revision 3 Вы можете сделать либо:

android update sdk --no-ui --filter 3

или же

android update sdk -u -a -t 29

Сумасшедший, но это работает.

Большинство ответов, похоже, игнорируют тот факт, что вам может потребоваться запустить обновление в автономной среде без прав суперпользователя, что означает, что сценарий должен ответить на все y/n лицензия запрашивает автоматически.

Вот пример, который делает трюк.

FILTER=tool,platform,android-20,build-tools-20.0.0,android-19,android-19.0.1

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | android update sdk --no-ui --all \
    --filter ${FILTER}

Независимо от того, сколько запросов вы получите, на все они будут даны ответы. это while/sleep цикл выглядит как симуляция команды yes, и на самом деле это так, почти. Проблема с yes является то, что он затопляет стандартный вывод 'y' и практически нет задержки между отправкой этих символов и версией, с которой мне приходилось иметь дело, не было никакой опции тайм-аута. Это "загрязнит" стандартный вывод, и скрипт не сможет жаловаться на неправильный ввод. Решение состоит в том, чтобы поставить задержку между отправкой 'y' в стандартный вывод, и это именно то, что while/sleep комбо делает.

expect по умолчанию недоступен в некоторых дистрибутивах Linux, и у меня не было возможности установить его как часть моих скриптов CI, поэтому пришлось использовать самое универсальное решение, и ничто не может быть более универсальным, чем простой скрипт bash, верно?

Фактически, я написал об этом в блоге ( NSBogan), проверьте это для более подробной информации здесь, если вы заинтересованы.

Тем не менее, он работает слишком медленно

Да, у меня была такая же проблема. Некоторые из файлов загружаются очень медленно (или, по крайней мере, они были в последние пару дней). Если вы хотите скачать все, что не так много, вы можете с этим поделать.

В результате в папке build-tools ничего нет, а я хочу aapt и apkbuilder, так как я хочу собрать apk из командной строки без ant.

Ты позволил этому дойти до завершения?

Одна вещь, которую вы можете сделать, это отфильтровать пакеты, которые загружаются с помощью -t переключатель.

Например:

tools/android update sdk --no-ui -t platform-tool

Когда я попробовал это на днях, я установил версию 18.0.0 инструментов сборки. По какой-то причине последняя версия 18.0.1 не включена в этот фильтр, и единственный способ получить ее - это установить все вместе с --all переключатель.

Я предпочитаю ставить скрипт, который устанавливает мои зависимости

Что-то вроде:

#!/usr/bin/env bash
#
# Install JUST the required dependencies for the project.
# May be used for ci or other team members.
#

for I in android-25 \
         build-tools-25.0.2  \
         tool \
         extra-android-m2repository \
         extra-android-support \
         extra-google-google_play_services \
         extra-google-m2repository;

 do echo y | android update sdk --no-ui --all --filter $I ; done

https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh

У меня просто была эта проблема, поэтому я наконец написал грязное решение на 1 строку, прочитав и проанализировав список доступных инструментов:

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')

Вдохновленный ответами @i4niac & @Aurélien Lambert, это то, что я придумал

csv_update_numbers=$(./android list sdk --all | grep 'Android SDK Build-tools' | grep -v 'Obsolete' | sed 's/\(.*\)\- A.*/\1/'|sed '/^$/d'|sed -e 's/^[ \t]*//'| tr '\n' ',')
csv_update_numbers_without_trailing_comma=${csv_update_numbers%?}

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | ./android update sdk --all -u -t $csv_update_numbers_without_trailing_comma

объяснение

  • получить разделенный запятыми список чисел, которые являются индексами пакетов инструментов сборки в результате android list sdk --all команда (игнорирование устаревших пакетов).
  • каждые несколько миллисекунд продолжайте бросать вас в терминал, чтобы принять лицензии.

Загрузите Android SDK с developer.android.com (в настоящее время это файл объемом 149 Мб для ОС Windows). Стоит отметить, что android удалил графический интерфейс sdkmanager, но имеет версию командной строки sdkmanager в папке bin, которая находится внутри папки tools.

  1. Находясь в папке bin, удерживайте нажатой клавишу Shift, щелкните правой кнопкой мыши, затем выберите здесь открыть командную строку. Shift + правый клик >> откройте командную строку здесь.
  2. Когда откроется командная строка, введите sdkmanager и нажмите ввод.
  3. Затем запустите команду sdkmanager (пробел), двойной дефис (-), список типов Sdkmanager --list (здесь перечислены все пакеты в менеджере SDK).
  4. Введите sdkmanager (пробел), затем имя пакета и нажмите ввод. Например. sdkmanager platform-tools (нажмите enter) Загрузит лицензионное соглашение. С опциями (да / нет). Введите y, чтобы принять, и он загрузит указанный вами пакет.

Надеюсь, это поможет.:)

Инструменты сборки не могут быть загружены автоматически по умолчанию, как сказал Нейт в /questions/12159315/kak-ustanovit-android-sdk-build-tools-v-komandnoj-stroke/12159327#12159327 сообщении.

Но я написал небольшой инструмент, который сделает все для вас

Я использовал инструмент "ожидается" в качестве DanB в сообщении /questions/17886129/est-li-sposob-avtomatizirovat-ustanovku-android-sdk/17886138#17886138. Вам нужен только Android-SDK и python27, expect,

Этот скрипт установит все инструменты сборки, все sdks и все, что вам нужно для автоматической сборки:

import subprocess,re,sys

w = subprocess.check_output(["android", "list", "sdk", "--all"])
lines = w.split("\n")
tools = filter(lambda x: "Build-tools" in x, lines)
filters = []
for tool in tools:
  m = re.search("^\s+([0-9]+)-", tool)
  tool_no = m.group(1)
  filters.append(tool_no)

if len(filters) == 0:
  raise Exception("Not found build tools")


filters.extend(['extra', 'platform', 'platform-tool', 'tool'])

filter = ",".join(filters)

expect= '''set timeout -1;
spawn android update sdk --no-ui --all --filter %s;
expect {
  "Do you accept the license" { exp_send "y\\r" ; exp_continue }
  eof
}''' % (filter)

print expect

ret = subprocess.call(["expect", "-c", expect])
sys.exit(ret)

Как указано в других ответах, инструменты сборки требуют --all флаг для установки. Вы также лучше использовать -t Флаг фильтра, чтобы избежать установки ВСЕХ пакетов, но нет способа отфильтровать все инструменты сборки.

В трекере ошибок AOSP уже есть запросы на добавление этих двух точек. Не стесняйтесь голосовать за них, это может заставить их когда-нибудь произойти:

Я попробовал это для обновления всех, и это сработало!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui

Пытаться

1. Перечислите все пакеты

android list sdk --all

2. Установите пакеты, используя следующую команду

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 

Android обновление SDK

Эта команда обновит и установит все последние версии инструментов SDK, инструментов сборки, инструментов платформы SDK.

Это работа для меня.

Чтобы настроить среду Android без установки всей студии Android:

  1. Загрузите JDK (версия выше 8)
  2. Загрузите градиент с https://gradle.org/install/
  3. Загрузите инструменты командной строки с https://developer.android.com/studio , прокрутите вниз и загрузите только инструменты командной строки.
  4. Настройте необходимые переменные среды
  5. Загрузите необходимые инструменты SDK
Другие вопросы по тегам