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

Zhe*_*ang 285 sdk android build-tools android-build aapt

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

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz
Run Code Online (Sandbox Code Playgroud)

解压缩文件后,运行

tools/android update sdk --no-ui
Run Code Online (Sandbox Code Playgroud)

但是,跑步太慢了

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml
Run Code Online (Sandbox Code Playgroud)

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

nsg*_*nsg 474

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

android list sdk --all
Run Code Online (Sandbox Code Playgroud)

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

android update sdk -u -a -t <package no.>
Run Code Online (Sandbox Code Playgroud)

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

如果需要安装多个包,请执行以下操作:

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

其中1,2,..,n是上面列出命令列出的包号

  • 它有点糟糕,他们没有在[官方提示]中提及`--all`选项(http://tools.android.com/recent/updatingsdkfromcommand-line).谢谢. (19认同)
  • 如果您缺少像18.1.1这样的构建工具,那么这是使用命令行安装它的正确方法. (4认同)
  • @DanielJonker是的,确实如此.只需对命令回显"是",即回显是| android update sdk --all --filter tools --no-ui --force>/dev/null (4认同)
  • `echo"yes"`可以缩短为`echo"y"`,但无论如何这并不适用于所有情况.在某些情况下,您可以获得多个y/n许可证提示,具体取决于过滤器和特定包.`echo"y"`将仅响应第一个提示,但不响应其余提示.我试图使用`yes`命令使其工作到目前为止没有成功. (4认同)
  • @AlexanderMalakhov我同意,如果你的主机操作系统有实用程序,使用它是最好的选择.我首先看了一下,但在我的情况下,我必须在AWS云中运行某个Linux分发版上运行脚本.该发行版没有预期安装,我没有足够的权限安装它作为构建计划的一部分.环顾四周之后,我找到的最佳解决方案是<pre> <code>在无头服务器上更新Android SDK FILTER =工具,平台,android-20(睡眠5 && while [1];做睡眠1;回显y;完成)\ | android update sdk --no-ui --all\--filter $ {FILTER} </ code> </ pre> (3认同)
  • `'android'命令已被弃用. - 2017年8月14日 (3认同)
  • android sdk 已经更新,现在@Alex Lipov 的答案更有效 /sf/answers/2885637051/ (2认同)

rob*_*obd 139

如其他答案中所述,您可以使用该--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
Run Code Online (Sandbox Code Playgroud)

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

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

  • `--extended`选项为+1,清楚地说明了为CI脚本安装的内容. (27认同)
  • `android update`也需要`--all`选项,否则会显示使用帮助.例如:`android update sdk --no-ui --all --filter build-tools-21.1.0`(和`--extended`选项的+1,它允许你看到像`build-tools这样的别名-21.1.0`) (16认同)
  • “--filter”和“--extend”选项的人在哪里? (2认同)
  • 我同意使用字符串而不是数字更好,这是不固定的. (2认同)

Ale*_*pov 67

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

用法(来自文档):

sdkmanager packages [options]
Run Code Online (Sandbox Code Playgroud)

所述packages参数是一个SDK风格的路径,包在引号(例如,"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/
Run Code Online (Sandbox Code Playgroud)

您还可以指定各种选项,例如强制所有连接使用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.
Run Code Online (Sandbox Code Playgroud)

  • @ulidtko使用文档中有一个错误.正确的方法是附加等号,例如`--package_file = packages.txt`. (3认同)
  • 另请注意,“sdkmanager”是 Java 二进制文件,因此您还必须预安装 Java。 (3认同)
  • @AaA它确实简化了从**命令行安装的任务。OP明确表示,他正在寻找“命令行”解决方案,因此您的评论在此情况下无关紧要。 (2认同)

Fli*_*bor 54

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

所以安装Buil-Tool类型(在控制台中):

android list sdk --all
Run Code Online (Sandbox Code Playgroud)

记住在项目之前列出的数字并执行以下操作:

android update sdk -u --all --filter <number>
Run Code Online (Sandbox Code Playgroud)

命令应该输入/ YourFolder/android-sdk-linux/tools

也适用于远程文件夹(例如由ssh打开的服务器)类型:

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>
Run Code Online (Sandbox Code Playgroud)

对于简单的ADB包列表,请在终端中输入:

android list sdk
Run Code Online (Sandbox Code Playgroud)

安装所有包:

android update sdk --no-ui
Run Code Online (Sandbox Code Playgroud)

或者使用过滤器(逗号是分隔符):

android update sdk --no-ui --filter 3,5,8,14
Run Code Online (Sandbox Code Playgroud)


geo*_*and 32

我尝试从命令行安装所有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
Run Code Online (Sandbox Code Playgroud)

  • `'android'命令已被弃用. - 2017年8月14日 (2认同)

lps*_*lps 21

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

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

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

疯了,但它的确有效.


i4n*_*iac 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}
Run Code Online (Sandbox Code Playgroud)

无论你得到多少提示,所有这些都会得到回答.这个while/sleep循环看起来像yes命令的模拟,实际上它几乎是.问题yes在于它泛滥stdout 'y'并且在发送这些字符之间几乎没有延迟,而我必须处理的版本没有任何类型的超时选项.它将"污染"stdout并且脚本将失败抱怨输入错误.解决方案是在发送'y'到stdout 之间延迟,这正是while/sleep组合所做的.

expect 在某些Linux发行版上默认不可用,我无法将其作为我的CI脚本的一部分安装,因此不得不使用最通用的解决方案,没有什么比简单的bash脚本更通用,对吧?

事实上,我在博客上写了这篇文章(NSBogan),如果你有兴趣,可以在这里查看更多细节.


Мак*_*тов 16

不推荐使用“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
Run Code Online (Sandbox Code Playgroud)

或者

wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
Run Code Online (Sandbox Code Playgroud)

之后只需将存档解压缩到目标文件夹

unzip sdk-tools-linux.zip
Run Code Online (Sandbox Code Playgroud)

现在我们可以安装您需要的一切...

./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令获取完整的软件包列表 ./tools/bin/sdkmanager --list

某些软件包需要接受许可协议。您可以以交互方式接受它,也可以将“y”传递给输入流,如下所示(以防万一):

echo -ne "y\ny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'
Run Code Online (Sandbox Code Playgroud)

当然,为了您的方便,您可以导出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'
Run Code Online (Sandbox Code Playgroud)

要求: curl(或 wget)和解压

故障排除:

如果看到Warning: Could not create settings,则需要在 ANDROID_HOMEtools内的cmdline-tools目录中创建目录(如果需要,请使用此确切名称创建它),请参阅Android 命令行工具 sdkmanager 始终显示:警告:无法创建设置


Las*_*hds 13

如果你已经sdkmanager安装(我正在使用MAC)

运行sdkmanager --list以列出可用的包.

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

安装首选版本运行

sdkmanager "build-tools;27.0.3"
Run Code Online (Sandbox Code Playgroud)


Dan*_*yer 8

但是,跑步太慢了

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

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

你让它完成了吗?

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

例如:

tools/android update sdk --no-ui -t platform-tool
Run Code Online (Sandbox Code Playgroud)

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

  • 运行此命令以获取可用的过滤器:"android update sdk -h"...一个过滤器,以[逗号分隔的[platform,system-image,tool,platform]逗号分隔列表的形式限制对指定类型的包的更新-tool,doc,sample,source].这也接受'list sdk --extended'返回的标识符. (2认同)

Dan*_*ico 5

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

就像是:

#!/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
Run Code Online (Sandbox Code Playgroud)

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