我想从命令行设置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中什么都没有,我想要的是apapt和apkbuilder,因为我想从命令行构建apk而没有ant。


当前回答

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

When inside the bin folder, hold down the shift key, right click, then select open command line here. Shift+right click >> open command line here. When the command line opens, type sdkmanager click enter. Then run type sdkmanager (space), double hyphen (--), type list sdkmanager --list (this lists all the packages in the SDK manager) Type sdkmanager (space) then package name, press enter. Eg. sdkmanager platform-tools (press enter) It will load licence agreement. With options (y/n). Enter y to accept and it will download the package you specified.

如需更多参考,请参考这里的官方文件

我希望这能有所帮助。:)

其他回答

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

android list sdk --all

然后从命令行获取列表中的一个包,使用:

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

其中-u代表——no-ui, -a代表——all, -t代表——filter。

如果你需要安装多个包,请:

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

在1、2、…,n为上面list命令列出的包号

但是,它跑起来太慢了

是的,我也遇到过同样的问题。有些文件下载非常慢(至少在过去几天是这样)。如果你想下载所有的东西,你可以做的不多。

结果是在文件夹build-tools中什么都没有,我想要的是apapt和apkbuilder,因为我想从命令行构建apk而没有ant。

你让它跑完吗?

您可以做的一件事是使用-t开关过滤正在下载的包。

例如:

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

当我前几天尝试这样做时,我安装了18.0.0版本的构建工具。由于某种原因,最新版本18.0.1没有包含在这个过滤器中,获得它的唯一方法是使用——all开关安装所有东西。

灵感来自@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'以接受许可证。

Try

1. 列出所有软件包

android list sdk --all

2. 使用以下命令安装包

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

构建工具在默认情况下不能自动下载,就像Nate在https://stackoverflow.com/a/19416222/1104031的帖子中说的那样。

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

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

这个脚本将安装所有的构建工具,所有的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)