我想从命令行设置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。
正如在其他回答中提到的,你可以使用——filter选项来限制安装的包:
Android SDK更新过滤器…
其他答案没有提到可以使用常量字符串标识符而不是用于筛选器选项的索引(索引将会更改)。这对于无人值守或脚本安装很有帮助。过滤选项:
... 这也接受'list sdk——extended'返回的标识符。
Android列表SDK——全部——扩展:
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更新SDK——过滤工具,平台工具,build-tools-19.0.3等
默认情况下,命令行中的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命令列出的包号
灵感来自@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'以接受许可证。