我想从命令行设置 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
结果是文件夹构建工具中没有任何内容,我想要的是 aapt 和 apkbuilder,因为我想在没有 ant 的情况下从命令行构建 apk。
默认情况下,命令行中的 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 命令列出的包编号
如其他答案所述,您可以使用--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
然后,可以使用字符串 ID 作为筛选器选项来精确指定所需的版本:
android update sdk --filter tools,platform-tools,build-tools-19.0.3
等
Android SDK Tools
软件包的版本 25.2.3(及更高版本(包含新工具 - sdkmanager - 它简化了从命令行安装构建工具的任务.
它位于android_sdk/tools/bin
文件夹中。
用法(来自文档(:
列出已安装和可用的软件包:
sdkmanager --list [options] [--channel=channel_id] // Channels: 0 (stable), 1 (beta), 2 (dev), or 3 (canary)
使用通道选项可包含从通道到channel_id的包。例如,指定 Canary 通道以列出所有通道中的包。
安装包:
sdkmanager packages [options]
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/
您还可以指定各种选项,例如强制所有连接使用 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.
ADB 构建工具不会自动下载,通过命令 android update sdk --no-ui
因此,对于安装Buil-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
在尝试从命令行安装与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
安装了sdkmanager
(我使用的是MAC(
运行sdkmanager --list
以列出可用的包。
如果要安装生成工具,请从可用包列表中复制首选版本。
要安装首选版本,请运行
sdkmanager "build-tools;27.0.3"
"android"命令已弃用。
对于命令行工具,请使用 tools/bin/sdkmanager 和 tools/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
或
wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
之后,只需将存档解压缩到目标文件夹
unzip sdk-tools-linux.zip
现在我们可以安装您需要的一切...
./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'
您可以使用命令获取软件包的完整列表./tools/bin/sdkmanager --list
某些软件包需要接受许可协议。 您可以交互式地接受它,也可以将"Y"传递给输入流,如下所示(如果是两个协议(:
echo -ne "yny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'
当然,为了您的方便,您可以导出诸如ANDROID_HOME或ANDROID_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'
要求:卷曲(或 WGET(和解压缩
故障 排除:
如果您看到 Warning: Could not create settings
,则需要将tools
目录放在ANDROID_HOME内的cmdline-tools
目录中(如果需要,请使用此确切名称创建它(请参阅安卓 命令行工具 SDK管理器始终显示: 警告:无法创建设置
我只是花了一段时间通过命令行安装 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
许可证提示。
这是可以解决问题的示例。
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}
无论您收到多少提示,所有这些提示都会得到回答。这个while/sleep
循环看起来像是 yes 命令的模拟,事实上,它几乎是。yes
的问题在于它用'y'
淹没了 stdout,并且在发送这些字符之间几乎没有延迟,我必须处理的版本没有任何类型的超时选项。它将"污染"标准输出,脚本将无法抱怨输入不正确。解决方案是在将'y'
发送到标准输出之间设置延迟,这正是while/sleep
组合所做的。
默认情况下,expect
在某些 linux 发行版上不可用,我无法将其作为 CI 脚本的一部分安装,因此不得不使用最通用的解决方案,没有什么比简单的 bash 脚本更通用的了,对吧?
事实上,我在博客上写了它(NSBogan(,如果您有兴趣,请在此处查看更多详细信息。
但是,运行速度太慢
是的,我遇到了同样的问题。 一些文件下载非常慢(或者至少在过去几天内(。 如果你想下载所有内容,你无能为力。
结果是文件夹构建工具中没有任何内容,我想要的是 aapt 和 apkbuilder,因为我想在没有 ant 的情况下从命令行构建 apk。
你让它运行到完成了吗?
您可以做的一件事是使用 -t
开关过滤正在下载的包。
例如:
tools/android update sdk --no-ui -t platform-tool
当我前几天尝试这个时,我安装了 18.0.0 版的构建工具。 由于某种原因,此过滤器不包含最新版本18.0.1,获取它的唯一方法是使用--all
开关安装所有内容。
我更喜欢放一个安装我的依赖项的脚本
像这样:
#!/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
https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh
我只是遇到了这个问题,所以我最终通过阅读和解析可用工具列表编写了一个 1 行 bash 脏解决方案:
tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *([0-9]+)-.*/1/')
来自@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"以接受许可证。
从 developer.android.com 下载android SDK(目前为Windows操作系统提供149MB文件(。值得注意的是,android 已经删除了 sdkmanager GUI,但在位于 tools 文件夹内的 bin 文件夹中有一个命令行版本的 sdkmanager。
- 在 bin 文件夹中时,按住 shift 键,右键单击,然后选择在此处打开命令行。Shift+右键单击>>在此处打开命令行。
- 当命令行打开时,键入
sdkmanager
单击 Enter。 - 然后运行类型
sdkmanager
(空格(, 双连字符 (--
(, 类型 列表sdkmanager --list
(这将列出 SDK 管理器中的所有包(
键入 - sdkmanager(空格(,然后键入包名称,按回车键。例如。SDK管理器平台工具(按回车键(它将加载许可协议。带选项 (是/否(。输入 y 接受,它将下载您指定的包。
如需更多参考,请在此处查看官方文档
我希望这有帮助。:)
默认情况下,构建工具无法自动下载,正如 Nate 在帖子 https://stackoverflow.com/a/19416222/1104031 所说。
但是我写了小工具,可以为您制作一切
我在帖子中使用了"期望"工具作为 danb https://stackoverflow.com/a/17863931/1104031。你只需要安卓sdk和python27
,expect
。
此脚本将安装所有构建工具、所有 SDK 以及自动生成所需的一切:
import subprocess,re,sys
w = subprocess.check_output(["android", "list", "sdk", "--all"])
lines = w.split("n")
tools = filter(lambda x: "Build-tools" in x, lines)
filters = []
for tool in tools:
m = re.search("^s+([0-9]+)-", tool)
tool_no = m.group(1)
filters.append(tool_no)
if len(filters) == 0:
raise Exception("Not found build tools")
filters.extend(['extra', 'platform', 'platform-tool', 'tool'])
filter = ",".join(filters)
expect= '''set timeout -1;
spawn android update sdk --no-ui --all --filter %s;
expect {
"Do you accept the license" { exp_send "y\r" ; exp_continue }
eof
}''' % (filter)
print expect
ret = subprocess.call(["expect", "-c", expect])
sys.exit(ret)
如其他响应中所述,构建工具需要安装 --all
标志。您最好使用 -t
filter 标志来避免安装所有软件包,但无法过滤所有构建工具。
AOSP 错误跟踪器中已经有针对这两点的功能请求。随意投票给他们,这可能会让它们有一天发生:
- https://code.google.com/p/android/issues/detail?id=78765
- https://code.google.com/p/android/issues/detail?id=58337
我尝试了这个更新所有内容,它奏效了!
echo y | $ANDROID_HOME/tools/android update sdk --no-ui
尝试
1. 列出所有软件包
android list sdk --all
2. 使用以下命令安装软件包
android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command
android update SDK
此命令将更新并安装SDK工具,构建工具,SDK平台工具的所有最新版本。
这对我来说是工作。
要在不安装整个安卓工作室的情况下设置 android 环境:
- 下载 JDK(版本大于 8(
- 从 https://gradle.org/install/下载 gradle
- 从 https://developer.android.com/studio 向下滚动并仅下载命令行工具下载命令行工具
- 设置必要的环境变量
- 下载必要的开发工具包工具