用CLI安装Android SDK
2018-03-07 16:23:39 +08
字数:3234
标签:
Android
Linux
在进行个人的Android开发环境准备时,通过Android Studio可以在一个漂亮的图形界面,安装、配置Android SDK。
但它也可以通过纯CLI的方式完成,有时反而更方便。
Bootstrap ¶
在已经有tools组件后,自然就可以在CLI管理Android SDK的所有组件。
但是,在一无所有时,自然需要自举(Bootstrap),初始化一个tools组件。
wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
unzip sdk-tools-linux-3859397.zip
解压后,在./tools/bin/sdkmanager
位置的这个可执行文件,就是管理Android SDK的CLI工具。
以上是tools的26.0.1
Linux版本,在预订要放置Android SDK的目录,下载后解压,即安装完成。
这个版本来源于最新的tools下载页面。
如果与本文的发布时间相隔甚远,可以通过访问这个页面,获取较新的下载链接。
当然,访问该页面需要自备墙梯。
下载却不用,因为域名是dl.google.com
,可见俺们的墙也是很鸡贼的。
为了省事,这里把Mac和Windows的下载链接一并给出。
后面的介绍仍然以Linux为例。
(不要担忧这个版本会过时,因为已经过时了。不过自举完成后,就可自我更新。)
Licenses ¶
要使用Android SDK的相关组件前,需要接受5个用户协议。
懂法律的朋友可以仔细看一下。
看不懂,或者信任Google的朋友,为了避免麻烦,可以统一接受这5个协议。
yes | ./tools/bin/sdkmanager --licenses
更新sdkmanager ¶
由于文档总是滞后于开发,所以刚下载的tools,往往是旧版本。
在《SDK Tools Release Notes | Android Studio》页面,可以看到最新发布的tools版本信息。
孤刚下载的是26.0.1
,而最新已经是26.1.1
了。
它对sdkmanager
的界面显示做了一些优化。
26.0.1
版本的--list
对显示做了折叠,基本没法用,必须再加上--verbose
参数才能得到完整的可用信息。
所以,这个更新还是很有必要的。
(它也会顺便安装emulator
、patcher;v4
、platform-tools
三个组件。)
$ ./tools/bin/sdkmanager tools
done
可以通过--help
,查看sdkmanager
的帮助文档。
也可访问《sdkmanager | Android Studio》,在线查看。
列出SDK组件 ¶
在以前,都是使用./tools/android
来做SDK管理,但近期已被废弃。
比如,列出SDK的组件。
$ ./tools/android list sdk
*************************************************************************
The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
"android" SDK commands can be translated to sdkmanager commands on a best-effort basis.
Continue? (This prompt can be suppressed with the --use-sdk-wrapper command-line argument
or by setting the USE_SDK_WRAPPER environment variable) [y/N]:
现在使用./tools/bin/sdkmanager --list
,来列出已安装和可安装的组件。
sdkmanager
替代了原./tools/android
的SDK管理功能。
(avdmanager
替代了虚拟设备的管理功能。)
sdkmanager
可以按版本查看、安装、卸载Android的组件。
以下列出当前(2018年3月)的可用组件:
Path
Version
Description
add-ons;addon-google_apis-google-15
3
Google APIs
add-ons;addon-google_apis-google-16
4
Google APIs
add-ons;addon-google_apis-google-17
4
Google APIs
add-ons;addon-google_apis-google-18
4
Google APIs
add-ons;addon-google_apis-google-19
20
Google APIs
add-ons;addon-google_apis-google-21
1
Google APIs
add-ons;addon-google_apis-google-22
1
Google APIs
add-ons;addon-google_apis-google-23
1
Google APIs
add-ons;addon-google_apis-google-24
1
Google APIs
add-ons;addon-google_gdk-google-19
11
Glass Development Kit Preview
build-tools;19.1.0
19.1.0
Android SDK Build-Tools 19.1
build-tools;20.0.0
20.0.0
Android SDK Build-Tools 20
build-tools;21.1.2
21.1.2
Android SDK Build-Tools 21.1.2
build-tools;22.0.1
22.0.1
Android SDK Build-Tools 22.0.1
build-tools;23.0.1
23.0.1
Android SDK Build-Tools 23.0.1
build-tools;23.0.2
23.0.2
Android SDK Build-Tools 23.0.2
build-tools;23.0.3
23.0.3
Android SDK Build-Tools 23.0.3
build-tools;24.0.0
24.0.0
Android SDK Build-Tools 24
build-tools;24.0.1
24.0.1
Android SDK Build-Tools 24.0.1
build-tools;24.0.2
24.0.2
Android SDK Build-Tools 24.0.2
build-tools;24.0.3
24.0.3
Android SDK Build-Tools 24.0.3
build-tools;25.0.0
25.0.0
Android SDK Build-Tools 25
build-tools;25.0.1
25.0.1
Android SDK Build-Tools 25.0.1
build-tools;25.0.2
25.0.2
Android SDK Build-Tools 25.0.2
build-tools;25.0.3
25.0.3
Android SDK Build-Tools 25.0.3
build-tools;26.0.0
26.0.0
Android SDK Build-Tools 26
build-tools;26.0.1
26.0.1
Android SDK Build-Tools 26.0.1
build-tools;26.0.2
26.0.2
Android SDK Build-Tools 26.0.2
build-tools;26.0.3
26.0.3
Android SDK Build-Tools 26.0.3
build-tools;27.0.0
27.0.0
Android SDK Build-Tools 27
build-tools;27.0.1
27.0.1
Android SDK Build-Tools 27.0.1
build-tools;27.0.2
27.0.2
Android SDK Build-Tools 27.0.2
build-tools;27.0.3
27.0.3
Android SDK Build-Tools 27.0.3
cmake;3.6.4111459
3.6.4111459
CMake 3.6.4111459
docs
1
Documentation for Android SDK
emulator
27.1.12
Android Emulator
extras;android;gapid;1
1.0.3
GPU Debugging tools
extras;android;gapid;3
3.1.0
GPU Debugging tools
extras;android;m2repository
47.0.0
Android Support Repository
extras;google;auto
1.1
Android Auto Desktop Head Unit emulator
extras;google;google_play_services
46
Google Play services
extras;google;instantapps
1.1.0
Instant Apps Development SDK
extras;google;m2repository
58
Google Repository
extras;google;market_apk_expansion
1
Google Play APK Expansion library
extras;google;market_licensing
1
Google Play Licensing Library
extras;google;simulators
1
Android Auto API Simulators
extras;google;webdriver
2
Google Web Driver
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0
1
Solver for ConstraintLayout 1.0.0
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha2
1
com.android.support.constraint:constraint-layout-solver:1.0.0-alpha
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha3
1
com.android.support.constraint:constraint-layout-solver:1.0.0-alpha
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4
1
com.android.support.constraint:constraint-layout-solver:1.0.0-alpha
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha5
1
Solver for ConstraintLayout 1.0.0-alpha5
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha6
1
Solver for ConstraintLayout 1.0.0-alpha6
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha7
1
Solver for ConstraintLayout 1.0.0-alpha7
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8
1
Solver for ConstraintLayout 1.0.0-alpha8
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha9
1
Solver for ConstraintLayout 1.0.0-alpha9
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta1
1
Solver for ConstraintLayout 1.0.0-beta1
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta2
1
Solver for ConstraintLayout 1.0.0-beta2
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta3
1
Solver for ConstraintLayout 1.0.0-beta3
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta4
1
Solver for ConstraintLayout 1.0.0-beta4
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta5
1
Solver for ConstraintLayout 1.0.0-beta5
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1
1
Solver for ConstraintLayout 1.0.1
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2
1
Solver for ConstraintLayout 1.0.2
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0
1
ConstraintLayout for Android 1.0.0
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha2
1
com.android.support.constraint:constraint-layout:1.0.0-alpha2
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha3
1
com.android.support.constraint:constraint-layout:1.0.0-alpha3
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4
1
com.android.support.constraint:constraint-layout:1.0.0-alpha4
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha5
1
ConstraintLayout for Android 1.0.0-alpha5
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha6
1
ConstraintLayout for Android 1.0.0-alpha6
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha7
1
ConstraintLayout for Android 1.0.0-alpha7
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha8
1
ConstraintLayout for Android 1.0.0-alpha8
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha9
1
ConstraintLayout for Android 1.0.0-alpha9
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta1
1
ConstraintLayout for Android 1.0.0-beta1
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta2
1
ConstraintLayout for Android 1.0.0-beta2
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta3
1
ConstraintLayout for Android 1.0.0-beta3
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta4
1
ConstraintLayout for Android 1.0.0-beta4
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta5
1
ConstraintLayout for Android 1.0.0-beta5
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1
1
ConstraintLayout for Android 1.0.1
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2
1
ConstraintLayout for Android 1.0.2
lldb;2.0
2.0.2558144
LLDB 2.0
lldb;2.1
2.1.2852477
LLDB 2.1
lldb;2.2
2.2.3271982
LLDB 2.2
lldb;2.3
2.3.3614996
LLDB 2.3
lldb;3.0
3.0.4213617
LLDB 3.0
ndk-bundle
16.1.4479499
NDK
patcher;v4
1
SDK Patch Applier v4
platform-tools
27.0.1
Android SDK Platform-Tools
platforms;android-10
2
Android SDK Platform 10
platforms;android-11
2
Android SDK Platform 11
platforms;android-12
3
Android SDK Platform 12
platforms;android-13
1
Android SDK Platform 13
platforms;android-14
4
Android SDK Platform 14
platforms;android-15
5
Android SDK Platform 15
platforms;android-16
5
Android SDK Platform 16
platforms;android-17
3
Android SDK Platform 17
platforms;android-18
3
Android SDK Platform 18
platforms;android-19
4
Android SDK Platform 19
platforms;android-20
2
Android SDK Platform 20
platforms;android-21
2
Android SDK Platform 21
platforms;android-22
2
Android SDK Platform 22
platforms;android-23
3
Android SDK Platform 23
platforms;android-24
2
Android SDK Platform 24
platforms;android-25
3
Android SDK Platform 25
platforms;android-26
2
Android SDK Platform 26
platforms;android-27
1
Android SDK Platform 27
platforms;android-7
3
Android SDK Platform 7
platforms;android-8
3
Android SDK Platform 8
platforms;android-9
2
Android SDK Platform 9
sources;android-15
2
Sources for Android 15
sources;android-16
2
Sources for Android 16
sources;android-17
1
Sources for Android 17
sources;android-18
1
Sources for Android 18
sources;android-19
2
Sources for Android 19
sources;android-20
1
Sources for Android 20
sources;android-21
1
Sources for Android 21
sources;android-22
1
Sources for Android 22
sources;android-23
1
Sources for Android 23
sources;android-24
1
Sources for Android 24
sources;android-25
1
Sources for Android 25
sources;android-26
1
Sources for Android 26
sources;android-27
1
Sources for Android 27
system-images;android-10;default;armeabi-v7a
4
ARM EABI v7a System Image
system-images;android-10;default;x86
4
Intel x86 Atom System Image
system-images;android-10;google_apis;armeabi-v7a
5
Google APIs ARM EABI v7a System Image
system-images;android-10;google_apis;x86
5
Google APIs Intel x86 Atom System Image
system-images;android-14;default;armeabi-v7a
2
ARM EABI v7a System Image
system-images;android-15;default;armeabi-v7a
4
ARM EABI v7a System Image
system-images;android-15;default;mips
1
MIPS System Image
system-images;android-15;default;x86
4
Intel x86 Atom System Image
system-images;android-15;google_apis;armeabi-v7a
5
Google APIs ARM EABI v7a System Image
system-images;android-15;google_apis;x86
5
Google APIs Intel x86 Atom System Image
system-images;android-16;default;armeabi-v7a
4
ARM EABI v7a System Image
system-images;android-16;default;mips
1
MIPS System Image
system-images;android-16;default;x86
5
Intel x86 Atom System Image
system-images;android-16;google_apis;x86
5
Google APIs Intel x86 Atom System Image
system-images;android-17;default;armeabi-v7a
5
ARM EABI v7a System Image
system-images;android-17;default;mips
1
MIPS System Image
system-images;android-17;default;x86
3
Intel x86 Atom System Image
system-images;android-17;google_apis;armeabi-v7a
5
Google APIs ARM EABI v7a System Image
system-images;android-17;google_apis;x86
5
Google APIs Intel x86 Atom System Image
system-images;android-18;default;armeabi-v7a
4
ARM EABI v7a System Image
system-images;android-18;default;x86
3
Intel x86 Atom System Image
system-images;android-18;google_apis;armeabi-v7a
5
Google APIs ARM EABI v7a System Image
system-images;android-18;google_apis;x86
5
Google APIs Intel x86 Atom System Image
system-images;android-19;default;armeabi-v7a
5
ARM EABI v7a System Image
system-images;android-19;default;x86
6
Intel x86 Atom System Image
system-images;android-19;google_apis;armeabi-v7a
33
Google APIs ARM EABI v7a System Image
system-images;android-19;google_apis;x86
33
Google APIs Intel x86 Atom System Image
system-images;android-21;android-tv;armeabi-v7a
3
Android TV ARM EABI v7a System Image
system-images;android-21;android-tv;x86
3
Android TV Intel x86 Atom System Image
system-images;android-21;default;armeabi-v7a
4
ARM EABI v7a System Image
system-images;android-21;default;x86
5
Intel x86 Atom System Image
system-images;android-21;default;x86_64
5
Intel x86 Atom_64 System Image
system-images;android-21;google_apis;armeabi-v7a
25
Google APIs ARM EABI v7a System Image
system-images;android-21;google_apis;x86
25
Google APIs Intel x86 Atom System Image
system-images;android-21;google_apis;x86_64
25
Google APIs Intel x86 Atom_64 System Image
system-images;android-22;android-tv;armeabi-v7a
1
Android TV ARM EABI v7a System Image
system-images;android-22;android-tv;x86
3
Android TV Intel x86 Atom System Image
system-images;android-22;default;armeabi-v7a
2
ARM EABI v7a System Image
system-images;android-22;default;x86
6
Intel x86 Atom System Image
system-images;android-22;default;x86_64
6
Intel x86 Atom_64 System Image
system-images;android-22;google_apis;armeabi-v7a
19
Google APIs ARM EABI v7a System Image
system-images;android-22;google_apis;x86
19
Google APIs Intel x86 Atom System Image
system-images;android-22;google_apis;x86_64
19
Google APIs Intel x86 Atom_64 System Image
system-images;android-23;android-tv;armeabi-v7a
12
Android TV ARM EABI v7a System Image
system-images;android-23;android-tv;x86
14
Android TV Intel x86 Atom System Image
system-images;android-23;android-wear;armeabi-v7a
6
Android Wear ARM EABI v7a System Image
system-images;android-23;android-wear;x86
6
Android Wear Intel x86 Atom System Image
system-images;android-23;default;x86
10
Intel x86 Atom System Image
system-images;android-23;default;x86_64
10
Intel x86 Atom_64 System Image
system-images;android-23;google_apis;armeabi-v7a
26
Google APIs ARM EABI v7a System Image
system-images;android-23;google_apis;x86
26
Google APIs Intel x86 Atom System Image
system-images;android-23;google_apis;x86_64
26
Google APIs Intel x86 Atom_64 System Image
system-images;android-24;android-tv;x86
15
Android TV Intel x86 Atom System Image
system-images;android-24;default;arm64-v8a
7
ARM 64 v8a System Image
system-images;android-24;default;armeabi-v7a
7
ARM EABI v7a System Image
system-images;android-24;default;x86
8
Intel x86 Atom System Image
system-images;android-24;default;x86_64
8
Intel x86 Atom_64 System Image
system-images;android-24;google_apis;arm64-v8a
20
Google APIs ARM 64 v8a System Image
system-images;android-24;google_apis;armeabi-v7a
20
Google APIs ARM EABI v7a System Image
system-images;android-24;google_apis;x86
20
Google APIs Intel x86 Atom System Image
system-images;android-24;google_apis;x86_64
20
Google APIs Intel x86 Atom_64 System Image
system-images;android-24;google_apis_playstore;x86
19
Google Play Intel x86 Atom System Image
system-images;android-25;android-tv;x86
9
Android TV Intel x86 Atom System Image
system-images;android-25;android-wear-cn;armeabi-v7a
4
China version of Android Wear ARM EABI v7a System Image
system-images;android-25;android-wear-cn;x86
4
China version of Android Wear Intel x86 Atom System Image
system-images;android-25;android-wear;armeabi-v7a
3
Android Wear ARM EABI v7a System Image
system-images;android-25;android-wear;x86
3
Android Wear Intel x86 Atom System Image
system-images;android-25;google_apis;arm64-v8a
11
Google APIs ARM 64 v8a System Image
system-images;android-25;google_apis;armeabi-v7a
11
Google APIs ARM EABI v7a System Image
system-images;android-25;google_apis;x86
11
Google APIs Intel x86 Atom System Image
system-images;android-25;google_apis;x86_64
11
Google APIs Intel x86 Atom_64 System Image
system-images;android-25;google_apis_playstore;x86
9
Google Play Intel x86 Atom System Image
system-images;android-26;android-tv;x86
7
Android TV Intel x86 Atom System Image
system-images;android-26;android-wear-cn;x86
4
China version of Android Wear Intel x86 Atom System Image
system-images;android-26;android-wear;x86
4
Android Wear Intel x86 Atom System Image
system-images;android-26;google_apis;x86
8
Google APIs Intel x86 Atom System Image
system-images;android-26;google_apis;x86_64
8
Google APIs Intel x86 Atom_64 System Image
system-images;android-26;google_apis_playstore;x86
7
Google Play Intel x86 Atom System Image
system-images;android-27;android-tv;x86
2
Android TV Intel x86 Atom System Image
system-images;android-27;google_apis;x86
4
Google APIs Intel x86 Atom System Image
system-images;android-27;google_apis_playstore;x86
3
Google Play Intel x86 Atom System Image
tools
26.1.1
Android SDK Tools
以上表格为命令行显示整理后的结果,分三列。
第二列是版本,第三列是描述,和UI上的安卓管理器的显示类似。
第一列Path,含义是组件名称,可能还会加上版本,以分号;
隔开。
这其实也是本地安装路径,只要把分号;
看作/
。
把Path的内容直接放到./tools/bin/sdkmanager
后,就可安装这个组件。
安装组件 ¶
直接在sdkmanager
后,加上SDK组件的Path,就可以安装,一次一个。
但是注意,由于这里的Path愚蠢地以分号;
来作为分隔符,所以需要加上单引号''
或双引号""
,否则Shell会识别有误。
以下以build-tools
为例:
$ ./tools/bin/sdkmanager build-tools;27.0.3
Warning: Failed to find package build-tools
bash: 27.0.3: command not found
$ ./tools/bin/sdkmanager 'build-tools;27.0.3'
[=======================================] 100% Unzipping... android-8.1.0/jack-j
(26.1.1
版本的CLI显示,仍然有很多需要忍受的问题。)
卸载组件 ¶
如果不是硬盘不够,通常是不需要卸载的。
版本敏感的SDK组件,都已经分版本放置了,多版本可以共存。
所以SDK只需要不断更新即可。
但如果确实要卸载,可以用--uninstall
参数。
$ ./tools/bin/sdkmanager --uninstall 'build-tools;27.0.3'
[=======================================] 100% Fetch remote repository...
(忍……)
更新组件 ¶
有些组件是统一用一个版本的,比如tools
、platform-tools
。
有些组件本身是对应某个Android版本、甚至架构的,比如platforms;android-27
、system-images;android-27;google_apis_playstore;x86
。
如果要统一更新所有已安装组件,可以用--update
参数。
$ ./tools/bin/sdkmanager --update
[=======================================] 100% Computing updates...
(继续忍……)
总结 ¶
Android SDK组件繁多,又有必要和可选之分。
有这样一个CLI的方式进行管理,在进行大规模或重复性环境准备时,是很方便的。
就是这CLI的品质……