我想从命令行设置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 .
18 回答
默认情况下,命令行中的SDK Manager不包含列表中的构建工具 . 他们处于“过时”类别 . 要查看所有可用下载,请使用
然后从命令行获取该列表中的一个包,使用:
其中-u代表--no-ui,-a代表--all,-t代表--filter .
如果需要安装多个包,请执行以下操作:
其中1,2,..,n是上面列出命令列出的包号
如其他答案中所述,您可以使用
--filter
选项来限制已安装的软件包:android update sdk --filter ...
其他答案没有提到您可以使用常量字符串标识符而不是过滤器选项的索引(将更改) . 这对无人参与或脚本安装很有帮助 .
--filter
选项的人:android list sdk --all --extended
:然后,您可以使用字符串ID作为过滤器选项来精确指定所需的版本:
android update sdk --filter tools,platform-tools,build-tools-19.0.3
等Android SDK Tools
包的25.2.3(及更高版本)包含新工具 - sdkmanager - 这简化了从命令行安装构建工具的任务 .它位于
android_sdk/tools/bin
文件夹中 .Usage (from documentation):
Example usage (on my Mac):
您还可以指定各种options,例如强制所有连接使用HTTP(
--no_https
),或者使用代理服务器(--proxy_host=address
和--proxy_port=port
) .要检查可用选项,请使用
--help
标志 . 在我的机器(Mac)上,输出如下:ADB Build-Tools不会通过命令android update sdk --no-ui自动下载
所以安装Buil-Tool类型(在控制台中):
记住在项目之前列出的数字并执行以下操作:
命令应该输入/ YourFolder / android-sdk-linux / tools
也适用于远程文件夹(例如由ssh打开的服务器)类型:
对于简单的ADB包列表,请在终端中输入:
安装所有包:
或者使用过滤器(逗号是分隔符):
我尝试从命令行安装Android SDK时遇到的一个很好的信息来源是this Dockerfile . 在Dockerfile中,您可以看到作者执行单个命令来安装
platform tools
和build tools
而无需任何其他交互 . 在OP提出的情况下,该命令将适用于:我刚刚通过命令行安装了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
疯了,但它的确有效 .
大多数答案似乎忽略了这样一个事实:您可能需要在没有超级用户权限的无头环境中运行更新,这意味着脚本必须回答所有
y/n
许可证会自动提示 .这是诀窍的例子 .
无论你得到多少提示,所有这些都会得到回答 . 这个
while/sleep
循环看起来像yes命令的模拟,事实上它几乎是 .yes
的问题在于它使用'y'
泛滥stdout,并且在发送这些字符之间几乎没有延迟,我必须处理的版本没有任何类型的超时选项 . 它将"pollute" stdout并且脚本将失败抱怨输入错误 . 解决方案是在发送'y'
到stdout之间加一个延迟,这正是while/sleep
combo所做的 .expect
默认在某些Linux发行版上不可用,我无法将其安装为我的CI脚本的一部分,因此不得不使用最通用的解决方案,没有什么比简单的bash脚本更通用了,对吧?事实上,我在博客上发表了这篇文章(NSBogan),如果你有兴趣,可以在这里查看更多细节 .
是的,我遇到了同样的问题 . 一些文件下载非常慢(或者至少它们已经过去几天) . 如果你想下载所有内容,你可以做很多事情 .
你让它完成了吗?
您可以做的一件事是使用
-t
开关过滤正在下载的软件包 .例如:
前几天我尝试了这个版本,我安装了18.0.0版本的构建工具 . 由于某种原因,此过滤器不包含最新版本18.0.1,获得它的唯一方法是使用
--all
开关安装所有内容 .如果您安装了
sdkmanager
(我正在使用MAC)运行
sdkmanager --list
列出可用的包 .如果要安装构建工具,请从可用软件包列表中复制首选版本 .
安装首选版本运行
我刚刚遇到这个问题,所以我最后通过阅读和解析可用工具列表来编写了一行bash脏解决方案:
灵感来自@ i4niac和@AurélienLambert的答案,这就是我想出的
Explanation
获取逗号分隔的数字列表,这些数字是
android list sdk --all
命令(忽略过时的包)结果中构建工具包的索引 .每隔几毫秒继续在终端投掷'y'以接受许可 .
我更喜欢放一个安装我的依赖项的脚本
就像是:
https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh
Nate在https://stackoverflow.com/a/19416222/1104031帖子中说,默认情况下无法自动下载构建工具 .
但我写了一个小工具,为你做一切
我在https://stackoverflow.com/a/17863931/1104031帖子中使用"expect"工具作为danb . 你只需要android-sdk和
python27
,expect
.此脚本将安装所有构建工具,所有sdks以及自动构建所需的一切:
如其他响应中所述,构建工具需要安装
--all
标志 . 您还最好使用-t
过滤器标志来避免安装所有包,但无法过滤所有构建工具 .在AOSP错误跟踪器中已经有对这两点的功能请求 . 随意投票给他们,这可能会让他们有一天发生:
https://code.google.com/p/android/issues/detail?id=78765
https://code.google.com/p/android/issues/detail?id=58337
我试过这个更新所有,它工作了!
从developer.android.com下载android SDK(它目前是Windows操作系统的149mb文件) . 值得注意的是android已经删除了sdkmanager GUI,但在bin文件夹中有一个命令行版本的sdkmanager,它位于tools文件夹中 .
当在bin文件夹内时,按住shift键,右键单击,然后在此处选择打开命令行 . 右键单击>>打开命令行 .
命令行打开后,键入sdkmanager,单击“输入” .
然后运行类型sdkmanager(空格),双连字符( - ),类型列表Sdkmanager --list(这列出了SDK管理器中的所有包)
键入sdkmanager(space)然后输入包名称,按回车键 . 例如 . sdkmanager platform-tools(按回车)它将加载许可协议 . 带选项(y / n) . 输入y接受,它将下载您指定的包 .
我希望这有帮助 . :)
尝试
1. 列出所有包裹
2. 使用以下命令安装软件包
android update sdk
此命令将更新并安装SDK Tools,Build Tools,SDK平台工具的所有最新版本 .
这对我有用 .