應用場景
雖然 Android Studio 給我們提供了視覺化頁面來管理 SDK,但還是會有在命令列管理 SDK 的需求,比如在遠端管理 Jenkins 打包伺服器上的 SDK
歷史
在 SDK tools 25.2.3 版本以前 SDK 管理命令是 android,在 tools 目錄下,這時候是和其它功能共用 android 命令
從 25.2.3 開始就提供了 sdkmanager 命令專門來管理 SDK
由於 android 命令已經是過去式,這裡就不再闡述了,給出以下參考連結
參考:
sdkmanager
sdkmanager 命令專門用來管理 SDK,位於 tools/bin/ 目錄下,官方雖然提供了使用文件,但是不夠詳細,一些特殊的場景沒有給出解決辦法
參考:
列出所有已安裝、可安裝、可更新的包
$ sdkmanager --list
複製程式碼
結果如下(做了簡化,僅供參考)
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
add-ons;addon-g..._apis-google-22 | 1.0.0 | Google APIs, Android 22 | add-ons/addon-g...apis-google-22/
build-tools;25.0.2 | 25.0.2 | Android SDK Build-Tools 25.0.2 | build-tools/25.0.2/
docs | 1 | Documentation for Android SDK | docs/
emulator | 26.0.0 | Android Emulator | emulator/
extras;android;m2repository | 47.0.0 | Android Support Repository | extras/android/m2repository/
extras;google;m2repository | 55 | Google Repository | extras/google/m2repository/
extras;m2reposi...ut-solver;1.0.2 | 1 | Solver for ConstraintLayout 1.0.2 | extras/m2reposi...t-solver/1.0.2/
extras;m2reposi...nt-layout;1.0.2 | 1 | ConstraintLayout for Android 1... | extras/m2reposi...t-layout/1.0.2/
patcher;v1 | 1 | SDK Patch Applier v1 | patcher/v1/
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/
platform-tools | 25.0.5 | Android SDK Platform-Tools | platform-tools/
platforms;android-25 | 3 | Android SDK Platform 25, rev 3 | platforms/android-25/
sources;android-25 | 1 | Sources for Android 25 | sources/android-25/
system-images;a...gle_apis;x86_64 | 4 | Google APIs Intel x86 Atom_64 ... | system-images/a...le_apis/x86_64/
tools | 26.0.2 | Android SDK Tools | tools/
Available Packages:
Path | Version | Description
------- | ------- | -------
add-ons;addon-g..._apis-google-24 | 1 | Google APIs
add-ons;addon-g...e_gdk-google-19 | 11 | Glass Development Kit Preview
build-tools;26.0.0 | 26.0.0 | Android SDK Build-Tools 26
cmake;3.6.4111459 | 3.6.4111459 | CMake 3.6.4111459
docs | 1 | Documentation for Android SDK
emulator | 26.0.3 | 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...
extras;google;g...e_play_services | 42 | Google Play services
extras;google;instantapps | 1.0.0 | Instant Apps Development SDK
extras;google;m2repository | 55 | Google Repository
extras;google;m...t_apk_expansion | 1 | Google Play APK Expansion library
extras;google;market_licensing | 1 | Google Play Licensing Library
extras;google;play_billing | 5 | Google Play Billing Library
extras;google;simulators | 1 | Android Auto API Simulators
extras;google;webdriver | 2 | Google Web Driver
extras;intel;Ha...ecution_Manager | 6.1.1 | Intel x86 Emulator Accelerator...
extras;m2reposi...ut-solver;1.0.0 | 1 | Solver for ConstraintLayout 1.0.0
extras;m2reposi...er;1.0.0-alpha4 | 1 | com.android.support.constraint...
extras;m2reposi...ut-solver;1.0.2 | 1 | Solver for ConstraintLayout 1.0.2
extras;m2reposi...nt-layout;1.0.0 | 1 | ConstraintLayout for Android 1...
extras;m2reposi...out;1.0.0-beta5 | 1 | ConstraintLayout for Android 1...
extras;m2reposi...nt-layout;1.0.2 | 1 | ConstraintLayout for Android 1...
lldb;2.3 | 2.3.3614996 | LLDB 2.3
ndk-bundle | 15.1.4119039 | NDK
patcher;v4 | 1 | SDK Patch Applier v4
platform-tools | 26.0.0 | Android SDK Platform-Tools
platforms;android-26 | 1 | Android SDK Platform 26
sources;android-25 | 1 | Sources for Android 25
system-images;a...s_playstore;x86 | 4 | Google Play Intel x86 Atom Sys...
tools | 26.0.2 | Android SDK Tools
Available Updates:
ID | Installed | Available
------- | ------- | -------
emulator | 26.0.0 | 26.0.3
platform-tools | 25.0.5 | 26.0.0
system-images;android-25;google_apis;x86_64 | 4 | 6
done
複製程式碼
安裝
$ sdkmanager "platforms;android-26"
複製程式碼
雙引號裡面的就是Path那一列顯示的值,同理要安裝其他的包就使用對應的Path
更新
$ sdkmanager "system-images;android-25;google_apis;x86_64"
複製程式碼
更新和安裝是一樣的寫法,sdkmanager 會自動下載最新版替換已安裝的版本
一次更新全部可更新的包
$ sdkmanager --update
複製程式碼
刪除
$ sdkmanager --uninstall "sources;android-25"
複製程式碼
同意許可
我們在使用視覺化頁面安裝或更新的時候會有一個讓我們接受許可的步驟,在命令列也是有的,只需輸入"y"確認即可
你還可以通過 --licnses 引數一次檢視全部可接受的許可並輸入"y"接受,如下:
$ sdkmanager --licenses
6 of 6 SDK package licenses not accepted.
Review licenses that have not been accepted (y/N)?
複製程式碼
有多少個許可就需要輸入多少次"y"
有一種特殊的情況,當我們將這些命令寫在一個指令碼檔案裡去執行的時候許可會被自動拒絕,那麼我們怎麼才能在指令碼里需要許可的時候自動接受呢,如下:
$ yes | sdkmanager "platforms;android-26"
複製程式碼
--licnses 引數可以使用
$ yes | sdkmanager --licenses
複製程式碼
Path無效
細看上面 --list 的輸出結果就能發現,有一些 Path 由於過長,輸出的時候中間用 "..." 給替代了,這樣 的Path 是無法使用的,這時候需要加上 --verbose 引數輸出完整的 Path
$ sdkmanager --list --verbose
複製程式碼
結果如下(做了簡化,僅供參考):
Available Packages:
--------------------------------------
add-ons;addon-google_apis-google-24
Description: Google APIs
Version: 1
add-ons;addon-google_gdk-google-19
Description: Glass Development Kit Preview
Version: 11
build-tools;26.0.0
Description: Android SDK Build-Tools 26
Version: 26.0.0
extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2
Description: ConstraintLayout for Android 1.0.2
Version: 1
Dependencies:
extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2
sources;android-25
Description: Sources for Android 25
Version: 1
system-images;android-26;google_apis_playstore;x86
Description: Google Play Intel x86 Atom System Image
Version: 4
Dependencies:
patcher;v4
tools
Description: Android SDK Tools
Version: 26.0.2
Dependencies:
patcher;v4
emulator
platform-tools Revision 20
Available Updates:
--------------------------------------
emulator
Local Version: 26.0.0
Remote Version: 26.0.3
system-images;android-25;google_apis;x86_64
Local Version: 4
Remote Version: 6
done
複製程式碼
使用代理
早些時候 SDK 裡的包都存在dl-ssl.google.com 上,國內無法訪問,需要配置代理訪問國內的映象
現如今 SDK 裡的包都存在 dl.google.com 上,國內可以直接訪問
但可能還是會有需要代理的需求,如下配置即可:
$ sdkmanager --list --proxy-host mirrors.neusoft.edu.cn --proxy-port 80 -s
複製程式碼