如何在命令行上安装Android SDK Build Tools?

时间:2013-07-31 06:50:36

标签: android sdk android-build aapt build-tools

我想从命令行设置Android dev环境,遇到以下问题:

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

结果是文件夹构建工具中没有任何东西,我想要的是aapt和apkbuilder,因为我想在没有ant的情况下从命令行构建apk。

20 个答案:

答案 0 :(得分:472)

默认情况下,命令行中的SDK Manager不包含列表中的构建工具。他们处于“过时”类别。要查看所有可用下载,请使用

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

答案 1 :(得分:138)

如其他答案所述,您可以使用--filter选项限制已安装的软件包:

android update sdk --filter ...

其他答案没有提及您可以使用常量字符串标识符代替过滤器选项的索引(将更改)。这对无人参与或脚本安装很有帮助。 --filter选项的人:

  

...这也接受&#39; list sdk --extended&#39;返回的标识符。

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

然后,您可以使用字符串ID作为过滤器选项来精确指定所需的版本:

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

答案 2 :(得分:65)

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

用法(来自documentation):

android_sdk/tools/bin
     

sdkmanager packages [options] 参数是一个SDK风格的路径,用引号括起来(for   例如,packages"build-tools;25.0.0")。您可以   传递多个包路径,用空格分隔,但它们必须   每个都用自己的引号括起来。

示例用法(在我的Mac上):

"platforms;android-25"

您还可以指定各种options,例如强制所有连接使用HTTP(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/ ),或者使用代理服务器(--no_https--proxy_host=address )。

要检查可用选项,请使用--proxy_port=port标志。在我的机器(Mac)上,输出如下:

--help

答案 3 :(得分:54)

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

答案 4 :(得分:32)

我尝试从命令行安装Android SDK时遇到的一个很好的信息来源是this Dockerfile。在Dockerfile中,您可以看到作者执行单个命令来安装platform toolsbuild tools而无需任何其他交互。在OP提出的情况下,该命令将适用于:

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

答案 5 :(得分:21)

我刚刚通过命令行安装了android sdk依赖项,因为工具和网络附带的文档非常缺乏,我想我会发布我在这里发现的内容。

我与android sdk r24.4.1合作linux。您可以运行两个命令来列出可用的包:

android list sdk

更详尽:

android list sdk --all

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

疯狂,但它确实有效。

答案 6 :(得分:20)

大部分的答案似乎忽略了一个事实,你可能需要在一个没有超级用户权限的无头环境,这意味着脚本必须回答所有Settings settings = ImmutableSettings.settingsBuilder() .put("cluster.name", cluster) .put("client.transport.ping_timeout", "20s") .build(); this.client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(host, port)); 许可证自动提示运行更新。

这是诀窍的例子。

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} 循环看起来像yes命令的模拟,实际上它是几乎。这个问题while/sleep是它洪水泛滥了标准输出yes而且事实上发送我不得不处理有任何形式的超时选项这些字符的版本之间没有延迟。它将污染&#34;污染&#34; stdout和脚本将失败抱怨输入错误。解决方案是在将'y'发送到标准输出之间设置延迟,这恰恰是'y'组合所做的。

while/sleep是默认不可用在某些Linux发行版,我没有办法安装它作为我的CI脚本的一部分,所以只好用最通用的解决方案,没有什么能比简单的bash脚本更通用,对吗?

事实上,我在博客上发表了这篇文章(NSBogan),如果您有兴趣,请查看更多详情。

答案 7 :(得分:12)

不建议使用“ android”命令。

对于命令行工具,请使用 tools / bin / sdkmanager tools / 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_HOME ANDROID_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'

要求: 卷曲(或wget)并解压缩

故障排除:

如果看到Warning: Could not create settings,则需要将tools目录放在ANDROID_HOME的cmdline-tools目录中(如果需要,请使用此确切名称创建),请参见Android Command line tools sdkmanager always shows: Warning: Could not create settings

答案 8 :(得分:10)

如果您安装了sdkmanager(我使用MAC)

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

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

安装首选版本

sdkmanager "build-tools;27.0.3"

答案 9 :(得分:8)

  

然而,它在运行时太慢了

是的,我遇到了同样的问题。一些文件下载非常慢(或者至少它们已经过去几天)。如果你想下载所有内容,你可以做很多事情。

  

结果是文件夹构建工具中没有任何东西,我想要的是aapt和apkbuilder,因为我想在没有ant的情况下从命令行构建apk。

你让它完成了吗?

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

例如:

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

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

答案 10 :(得分:5)

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

类似的东西:

      document.addEventListener("DOMContentLoaded", function(event) {
            Label.prototype = new google.maps.OverlayView();
      });

https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh

答案 11 :(得分:4)

受@ i4niac&amp;的回答启发@AurélienLambert,这就是我想出来的

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'以接受许可。

答案 12 :(得分:4)

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

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')

答案 13 :(得分:2)

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

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

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

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

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)

答案 14 :(得分:2)

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

  1. 在bin文件夹中,按住Shift键,右键单击,然后在此处选择打开命令行。 Shift +右键单击>>在此处打开命令行。
  2. 打开命令行后,键入sdkmanager,然后按Enter。
  3. 然后运行类型--(空格),双连字符(sdkmanager --list),类型列表 short(此列表列出了SDK管理器中的所有软件包)
  4. 键入sdkmanager(空格),然后输入包名称,然后按Enter。 例如。 sdkmanager平台工具(按Enter) 它将加载许可协议。有选项(是/否)。输入y接受,它将下载您指定的软件包。

有关更多参考,请遵循官方文档here

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

答案 15 :(得分:1)

我试过这个以进行全部更新,并且有效!

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

答案 16 :(得分:1)

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

在AOSP错误跟踪器中已经有对这两点的功能请求。随意投票给他们,这可能会让他们有一天发生:

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

尝试

1。列出所有套餐

android list sdk --all

2. 使用以下命令

安装软件包
android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 

答案 19 :(得分:-1)

android update sdk

此命令将更新并安装SDK Tools,Build Tools,SDK平台工具的所有最新版本。

这对我有用。