我想从命令行设置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。


当前回答

我刚刚花了很长时间通过命令行安装android sdk依赖项,由于工具和在线附带的文档严重缺乏,我想我将在这里发布我发现的东西。

我正在使用android sdk r24.4.1 for linux。你可以运行两个命令来列出可用的包:

Android列表SDK

更详尽的是:

Android列表SDK——所有

对于上面的每个命令,特定包的包号不同!例如,前者将包API 23.1修订版3列为包#3,后者将其列为包#29。

现在,使用android命令有两种不同的安装方式。

Tools /android update SDK——no-ui——filter <package number>

and

Tools /android update SDK -u -a -t <包号>

假设每个安装命令都可以将package #作为参数,那么使用哪个包号呢?经过大量的网上搜索和尝试和错误,我发现

Android更新SDK——no-ui——过滤器使用Android列表SDK的包号

and

Android update SDK -u -a -t使用Android list SDK——all中的包号

换句话说,要安装API 23.1修订版3,你可以这样做:

Android更新SDK—no-ui—filter 3

or

Android更新SDK -u -a -t 29

很疯狂,但很有效。

其他回答

但是,它跑起来太慢了

是的,我也遇到过同样的问题。有些文件下载非常慢(至少在过去几天是这样)。如果你想下载所有的东西,你可以做的不多。

结果是在文件夹build-tools中什么都没有,我想要的是apapt和apkbuilder,因为我想从命令行构建apk而没有ant。

你让它跑完吗?

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

例如:

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

当我前几天尝试这样做时,我安装了18.0.0版本的构建工具。由于某种原因,最新版本18.0.1没有包含在这个过滤器中,获得它的唯一方法是使用——all开关安装所有东西。

我尝试了这个更新所有,它工作!

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

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

下载JDK(版本大于8) 从https://gradle.org/install/下载gradle 从https://developer.android.com/studio下载命令行工具,只下载命令行工具 设置必要的环境变量 下载必要的SDK工具

大多数答案似乎忽略了这样一个事实,即您可能需要在没有超级用户权限的无头环境中运行更新,这意味着脚本必须自动回答所有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),如果你感兴趣,可以在这里查看更多细节。

Try

1. 列出所有软件包

android list sdk --all

2. 使用以下命令安装包

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command