我想从命令行设置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。


当前回答

我刚刚花了很长时间通过命令行安装android sdk依赖项,由于工具和在线附带的文档严重缺乏,我想我将在这里发布我发现的东西。

我正在使用android sdk r24.4.1 for linux。你可以运行两个命令来列出可用的包:

Android列表SDK

更详尽的是:

Android列表SDK——所有

对于上面的每个命令,特定包的包号不同!例如,前者将包API 23.1修订版3列为包#3,后者将其列为包#29。

现在,使用android命令有两种不同的安装方式。

Tools /android update SDK——no-ui——filter <package number>

and

Tools /android update SDK -u -a -t <包号>

假设每个安装命令都可以将package #作为参数,那么使用哪个包号呢?经过大量的网上搜索和尝试和错误,我发现

Android更新SDK——no-ui——过滤器使用Android列表SDK的包号

and

Android update SDK -u -a -t使用Android list SDK——all中的包号

换句话说,要安装API 23.1修订版3,你可以这样做:

Android更新SDK—no-ui—filter 3

or

Android更新SDK -u -a -t 29

很疯狂,但很有效。

其他回答

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

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

但是,它跑起来太慢了

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

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

你让它跑完吗?

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

例如:

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

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

构建工具在默认情况下不能自动下载,就像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)

当我试图从命令行安装所有Android SDK相关的东西时,我遇到了一个很棒的信息来源,就是这个Dockerfile。在Dockerfile中,您可以看到作者执行了一个命令来安装平台工具和构建工具,而没有任何其他交互。在行动计划提出的情况下,该命令将被调整为:

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

ADB Build-Tools不会自动下载,通过命令android update sdk——no-ui

因此安装build - 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