318

我想从命令行设置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,因为我想在没有 ant 的情况下从命令行构建 apk。

4

20 回答 20

485

默认情况下,命令行中的 SDK 管理器不包括列表中的构建工具。它们属于“过时”类别。要查看所有可用的下载,请使用

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 是上面列表命令列出的包号

于 2013-10-17T00:24:17.917 回答
141

如其他答案中所述,您可以使用该--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

然后您可以使用字符串 ids 作为过滤器选项来精确指定您想要的版本:

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

于 2014-04-21T11:30:35.007 回答
83

版本 25.2.3(及更高版本)的Android SDK Tools软件包包含新工具 - sdkmanager - 它简化了从命令行安装构建工具的任务。
它位于android_sdk/tools/bin文件夹中。

用法(来自文档):

列出已安装和可用的软件包:

sdkmanager --list [options] \
      [--channel=channel_id] // Channels: 0 (stable), 1 (beta), 2 (dev), or 3 (canary)

使用 channel 选项来包含一个包,从一个通道直到包含 channel_id。例如,指定 canary 频道以列出来自所有频道的包。

安装包:

sdkmanager packages [options]

参数是 SDK 样式的packages路径,用引号括起来(例如,"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.
于 2016-12-19T13:12:23.797 回答
56

ADB Build-Tools 不会自动下载,通过命令 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
于 2014-04-04T11:49:53.753 回答
33

在尝试从命令行安装所有与 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
于 2014-11-21T11:32:39.663 回答
22

如果您已sdkmanager安装(我使用的是 MAC)

运行sdkmanager --list以列出可用的软件包。

如果要安装构建工具,请从可用软件包列表中复制首选版本。

要安装首选版本,请运行

sdkmanager "build-tools;27.0.3"
于 2018-01-05T05:44:50.087 回答
21

我只是有一段时间通过命令行安装了 android sdk 依赖项,并且由于工具和在线附带的文档非常缺乏,我想我会在这里发布我发现的内容。

我正在android sdk r24.4.1linux. 您可以运行两个命令来列出可用的软件包:

android list sdk

更详尽的:

android list sdk --all

特定包的包号因上述每个命令而异!例如,前者将包 API 23.1 revision 3列为 package#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

疯狂,但它有效。

于 2016-05-06T14:36:26.783 回答
20

大多数答案似乎都忽略了这样一个事实,即您可能需要在没有超级用户权限的无头环境中运行更新,这意味着脚本必须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 ),如果您有兴趣,请在此处查看更多详细信息。

于 2015-08-09T02:50:46.780 回答
18

“android”命令已弃用。

对于命令行工具,使用tools/bin/sdkmanagertools/bin/avdmanager

如果您不需要 Android Studio,您可以从developer.android.com的仅命令行工具部分下载基本的 Android 命令行工具。

从 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_HOMEANDROID_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,您需要在 ANDROID_HOMEtools内的cmdline-tools目录中包含该目录(如果需要,请使用此确切名称创建它)请参阅Android 命令行工具 sdkmanager 始终显示:警告:无法创建设置

于 2020-01-25T07:33:32.760 回答
8

但是运行起来太慢了

是的,我也遇到了同样的问题。一些文件的下载速度非常慢(或者至少在最近几天是这样)。如果您想下载所有内容,则无能为力。

结果是文件夹 build-tools 中没有任何内容,我想要的是 aapt 和 apkbuilder,因为我想在没有 ant 的情况下从命令行构建 apk。

你让它运行完成吗?

您可以做的一件事是过滤使用-t交换机下载的包。

例如:

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

当我前几天尝试这个时,我安装了 18.0.0 版的构建工具。由于某种原因,此过滤器不包含最新版本 18.0.1,获得它的唯一方法是使用--all交换机安装所有内容。

于 2013-08-01T20:42:14.627 回答
7

我更喜欢放置一个脚本来安装我的依赖项

就像是:

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

于 2017-01-31T19:49:16.767 回答
4

我刚遇到这个问题,所以我最终通过阅读和解析可用工具列表来编写一个 1 行 bash 脏解决方案:

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')
于 2015-01-16T10:14:47.813 回答
4

从 developer.android.com 下载 android SDK(它目前是一个 149mb 的 Windows 操作系统文件)。值得注意的是,android 已经删除了 sdkmanager GUI,但在位于 tools 文件夹内的 bin 文件夹中有一个命令行版本的 sdkmanager。

  1. 在 bin 文件夹中,按住 shift 键,右键单击,然后选择在此处打开命令行。Shift+右键单击>>在此处打开命令行。
  2. 当命令行打开时,键入sdkmanager单击回车。
  3. 然后运行 ​​type sdkmanager(space), double hyphen ( --), type list sdkmanager --list (这会列出 SDK 管理器中的所有包)
  4. 输入 sdkmanager(空格)然后输入包名,回车。例如。sdkmanager platform-tools (按回车) 它将加载许可协议。带选项(是/否)。输入 y 接受,它将下载您指定的包。

更多参考请关注官方文档here

我希望这有帮助。:)

于 2018-08-15T12:05:46.460 回答
4

灵感来自@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'以接受许可证。
于 2016-03-28T12:03:27.530 回答
2

正如 Nate 在https://stackoverflow.com/a/19416222/1104031帖子中所说,默认情况下无法自动下载构建工具。

但是我写了一个小工具,可以为你做一切

我在https://stackoverflow.com/a/17863931/1104031帖子中使用了“期望”工具作为 danb 。你只需要 android-sdk 和python27, expect

此脚本将安装所有构建工具、所有 sdk 以及自动构建所需的一切:

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)
于 2014-02-04T11:05:05.723 回答
1

如其他回复中所述,构建工具需要--all安装该标志。您还最好使用-t过滤器标志来避免安装所有包,但没有办法过滤所有构建工具。

AOSP bug tracker 中已经有针对这两点的功能请求。随意投票给他们,这可能会让他们有一天发生:

于 2015-03-19T17:15:44.970 回答
1

我试过这个更新所有,它工作!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui
于 2017-01-18T02:38:28.553 回答
0

尝试

1.列出所有包

android list sdk --all

2.使用以下命令安装包

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 
于 2017-05-05T05:05:08.727 回答
-1

在不安装整个 android studio 的情况下设置 android 环境:

  1. 下载JDK(版本大于8)
  2. 从https://gradle.org/install/下载 gradle
  3. https://developer.android.com/studio下载命令行工具向下滚动并仅下载命令行工具
  4. 设置必要的环境变量
  5. 下载必要的 SDK 工具
于 2021-03-09T07:22:16.190 回答
-1

安卓更新sdk

此命令将更新和安装 SDK 工具、构建工具、SDK 平台工具的所有最新版本。

这对我有用。

于 2016-04-27T07:10:21.823 回答