Is there a way to automate the android sdk installation?
The closer you can get to automation probably is:
$ android update sdk --no-ui
android provide these options for automatic updates:
Action "update sdk": Updates the SDK by suggesting new platforms to install if available. Options: -f --force Forces replacement of a package or its parts, even if something has been modified -u --no-ui Updates from command-line (does not display the GUI) -o --obsolete Installs obsolete packages -t --filter A filter that limits the update to the specified types of packages in the form of a comma-separated list of [platform, tool, platform-tool, doc, sample, extra] -s --no-https Uses HTTP instead of HTTPS (the default) for downloads -n --dry-mode Simulates the update but does not download or install anything
If you want to list which packages are available for installation you can use
$ android list sdk
and you'll obtain an ordered list of packages, for example
Packages available for installation or update: 9 1- ARM EABI v7a System Image, Android API 15, revision 2 2- Intel x86 Atom System Image, Android API 15, revision 1 3- Android Support, revision 8 4- Google AdMob Ads SDK, revision 6 5- Google Analytics SDK, revision 2 6- Google Play APK Expansion Library, revision 1 7- Google Play Billing Library, revision 2 8- Google Play Licensing Library, revision 2 9- Google Web Driver, revision 2
Also you can limit the update only to a desired component if you use the
$ android update sdk --filter <component> --no-ui
where component is one or more of
- the numbers returned by
android list sdk(i.e. 1, also know as package index)
or can be one or more specific identifiers. For instance, if you just want to download a small set of specific packages, you could do this:
$ android update sdk -u --filter platform-tools,android-16,extra-android-support
and you'll just get the platform tools, api level 16 and support package jar. This is really handy if you're building a build machine only and would have to pay for downloading all the extra stuff that you'll never use.
To see the available options you can use --help, for example
$ android --help list sdk Usage: android [global options] list sdk [action options] Global options: -h --help : Help on a specific command. -v --verbose : Verbose mode, shows errors, warnings and all messages. --clear-cache: Clear the SDK Manager repository manifest cache. -s --silent : Silent mode, shows errors only. Action "list sdk": Lists remote SDK repository. Options: -o --obsolete : Deprecated. Please use --all instead. -a --all : Lists all available packages (including obsolete and installed ones) --proxy-host: HTTP/HTTPS proxy host (overrides settings if defined) --proxy-port: HTTP/HTTPS proxy port (overrides settings if defined) -s --no-https : Uses HTTP instead of HTTPS (the default) for downloads. -e --extended : Displays extended details on each package -u --no-ui : Displays list result on console (no GUI) [Default: true]
Latest versions introduce
sdkmanager, a command line tool that allows you to view, install, update, and uninstall packages for the Android SDK.
sdkmanager tool is provided in the Android SDK Tools package (25.2.3 and higher) and is located in
sdkmanager [--uninstall] [<common args>] [--package_file <file>] [<packages>...] sdkmanager --update [<common args>] sdkmanager --list [<common args>] sdkmanager --licenses [<common args>] In its first form, installs, or uninstalls, or updates packages. By default, the listed packages are installed or (if already installed) updated to the latest version. --uninstall: uninstalled listed 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), all installed packages are updated to the latest version. In its third form, all installed and available packages are printed out. In its fourth form (with --licenses), show and offer the option to accept licenses for all available packages that have not already been accepted. 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.
so, to update the packages run
$ sdkmanager --update
to accept the licenses
$ yes | sdkmanager --licenses