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

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

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

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

Ответ 1

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

android list sdk --all

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

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

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

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

android update sdk -u -a -t 1,2,3,4,..,n 

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

Ответ 2

Как упоминалось в других ответах, вы можете использовать опцию --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 etc

Ответ 3

Инструменты сборки 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

Ответ 4

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

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

sdkmanager packages [options]

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

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

[email protected]:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
[email protected]:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
[email protected]:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

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

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

[email protected]:~/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.

Ответ 5

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

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

Ответ 6

Большинство ответов, похоже, игнорируют тот факт, что вам может потребоваться запустить обновление в безголовой среде без прав суперпользователя, что означает, что script должен автоматически отвечать на все запросы 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 заключается в том, что она наводняет stdout с помощью 'y', и между отправкой этих символов практически нет задержки, и версия, с которой мне пришлось иметь дело, не имела никакой опции тайм-аута любого типа. Он будет "загрязнять" stdout, а script не будет жаловаться на неправильный ввод. Решение состоит в том, чтобы поместить задержку между отправкой 'y' в stdout и что именно то, что делает while/sleep комбо.

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

Собственно, я писал об этом (NSBogan), проверьте его здесь, если вы заинтересованы.

Ответ 7

У меня просто было время получить зависимости sdk от android, установленные через командную строку, и поскольку документации, которая поставляется с инструментами и в Интернете, не хватает, я думал, что опубликую то, что я обнаружил здесь.

Я работаю с 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

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

Ответ 8

Однако он работает слишком медленно при запуске

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

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

Допустили ли это выполнение?

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

Например:

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

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

Ответ 9

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

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

Ответ 10

Вдохновленный ответами @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 (игнорирование устаревших пакетов).
  • продолжайте бросать 'y на терминал каждые несколько миллисекунд, чтобы принять лицензии.

Ответ 11

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

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

#!/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

Ответ 12

Инструменты сборки не могли быть загружены автоматически по умолчанию, как сказал Nate в сообщении fooobar.com/questions/26564/....

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

Я использовал инструмент "ожидать" как дань в сообщении fooobar.com/questions/26585/.... Вам нужны только андроид-sdk и python27, expect.

В этом script будут установлены все инструменты сборки, все 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)

Ответ 13

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

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

Ответ 14

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

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

Ответ 15

Try

1. Список всех пакетов

android list sdk --all

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

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

Ответ 16

android update sdk

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

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