How to install Android SDK Build Tools on the command line?


I want to setup the Android dev environment from command line, and encounter the following issue:


after extract the file, run

tools/android update sdk --no-ui

However, it is too slow on running


The result is that nothing in folder build-tools, and I want is aapt and apkbuilder, since I want to build apk from command line without ant.

3/4/2016 4:40:56 PM

As mentioned in other answers, you can use the --filter option to limit the installed packages:

android update sdk --filter ...

The other answers don't mention that you can use constant string identifiers instead of indexes (which will change) for the filter options. This is helpful for unattended or scripted installs. Man for --filter option:

... This also accepts the identifiers returned by '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

Then you can use the string ids as the filter options to precisely specify the versions you want:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 etc


Version 25.2.3 (and higher) of Android SDK Tools package contains new tool - sdkmanager - which simplifies this task of installing build-tools from the command line.
It is located in android_sdk/tools/bin folder.

Usage (from documentation):

sdkmanager packages [options]

The packages argument is an SDK-style path, wrapped in quotes (for example, "build-tools;25.0.0" or "platforms;android-25"). You can pass multiple package paths, separated with a space, but they must each be wrapped in their own set of quotes.

Example usage (on my Mac):

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

You can also specify various options, for example to force all connections to use HTTP (--no_https), or in order to use proxy server (--proxy_host=address and --proxy_port=port).

To check the available options, use the --help flag. On my machine (Mac), the output is as following:

[email protected]:~/sdk/tools/bin$ ./sdkmanager --help
  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 
    <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 Build-Tools Will Not be downloaded automatically, by command android update sdk --no-ui

So for installing Buil-Tool type (in console):

android list sdk --all

Remember the number that is listed before the item and execute the following:

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

commands should be typed in /YourFolder/android-sdk-linux/tools

Also for remote folder (server opened by ssh for example) type:

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

For simple list of ADB packages type in terminal:

android list sdk

for install all packages:

android update sdk --no-ui

Or with filters (comma is separator):

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

A great source of information I came across while trying to install everything Android SDK related from the command line, was this Dockerfile. Inside the Dockerfile you can see that the author executes a single command to install platform tools and build tools without any other interaction. In the case the OP has put forth, the command would be adapted to:

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

I just had a heck of a time getting android sdk dependencies installed via command line and since the documentation that comes with the tools and online are woefully lacking, I thought I'd post what I discovered here.

I'm working with android sdk r24.4.1 for linux. There are two commands that you can run to list the available packages:

android list sdk

and the more exhaustive:

android list sdk --all

The package numbers for specific packages differ for each command above! For example, the former lists package API 23.1 revision 3 as package #3 and the latter lists it as #29.

Now, there are two different ways to install using the android command.

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


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

Given that the install commands each can take the package # as a parameter, which package number do you use? After much online searching and trial and error, I discovered that

android update sdk --no-ui --filter uses the package numbers from android list sdk


android update sdk -u -a -t uses the package numbers from android list sdk --all

In other words - to install API 23.1 revision 3 you can do either:

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


android update sdk -u -a -t 29

Crazy, but it works.