我想从命令行设置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。
大多数答案似乎忽略了这样一个事实,即您可能需要在没有超级用户权限的无头环境中运行更新,这意味着脚本必须自动回答所有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}
No matter how many prompts you get, all of those will be answered. This while/sleep loop looks like simulation of the yes command, and in fact it is, well almost. The problem with yes is that it floods stdout with 'y' and there is virtually no delay between sending those characters and the version I had to deal with had no timeout option of any kind. It will "pollute" stdout and the script will fail complaining about incorrect input. The solution is to put a delay between sending 'y' to stdout, and that's exactly what while/sleep combo does.
expect在一些linux发行版上默认是不可用的,我没有办法将它作为我的CI脚本的一部分安装,所以必须使用最通用的解决方案,没有什么比简单的bash脚本更通用的了,对吗?
事实上,我在博客上写过(NSBogan),如果你感兴趣,可以在这里查看更多细节。
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
大多数答案似乎忽略了这样一个事实,即您可能需要在没有超级用户权限的无头环境中运行更新,这意味着脚本必须自动回答所有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}
No matter how many prompts you get, all of those will be answered. This while/sleep loop looks like simulation of the yes command, and in fact it is, well almost. The problem with yes is that it floods stdout with 'y' and there is virtually no delay between sending those characters and the version I had to deal with had no timeout option of any kind. It will "pollute" stdout and the script will fail complaining about incorrect input. The solution is to put a delay between sending 'y' to stdout, and that's exactly what while/sleep combo does.
expect在一些linux发行版上默认是不可用的,我没有办法将它作为我的CI脚本的一部分安装,所以必须使用最通用的解决方案,没有什么比简单的bash脚本更通用的了,对吗?
事实上,我在博客上写过(NSBogan),如果你感兴趣,可以在这里查看更多细节。