在25.2.3+
的sdk tools
中胶逢,不僅sdk的gui更新工具用不了洒闸,$ANDROID_SDK_ROOT/tools
目錄下的android.bat
(Linux為shell)也變成了deprecated
狀態(tài)池摧,官方推薦GUI界面使用studio集成管理器,命令行(使用場景:打包機或者CI系統(tǒng)中)界面使用$ANDROID_SDK_ROOT/tools/bin/sdkmanager.bat
擎浴,參考官方文檔伦吠,來自己嘗試下。
假設現(xiàn)在要在自己的開發(fā)機上新安裝sdk惹骂,如果使用studio苏携,則需要翻墻,無法使用g.cn:80
代理來加快速度对粪,或者干脆下載不了右冻。
從官方或者其他途徑下載到sdk tools
,官方下載界面如下
相應的著拭,下載studio無sdk版本
下載后解壓到D:\android\sdk\tools
纱扭,開始使用sdkmanager
,加上help
參數(shù)儡遮,列出使用方式
cd D:\android\sdk\tools\bin
sdkmanager --help
基礎用法如下:
#列出已安裝和可用的包(包括已安裝的包)
sdkmanager --list [options]
#安裝包
sdkmanager packages [options]
packages
參數(shù)為用--list
參數(shù)輸出的可用的包的path乳蛾,官方叫做SDK-style path
,例如安裝platform tools
的方法:
sdkmanager "platforms;android-26"
如果要一次安裝多個包鄙币,可以使用--package_file
參數(shù)指定包名配置文本文件肃叶,如下:
sdkmanager --package_file=package_file [options]
package_file
文件內(nèi)容為SDK-style path
,一行一個十嘿,沒有雙引號因惭,例如:
build-tools;23.0.1
build-tools;23.0.2
build-tools;23.0.3
刪除使用--uninstall
參數(shù),例如:
sdkmanager --uninstall packages [options]
sdkmanager --uninstall --package_file=package_file [options]
更新已安裝的包
sdkmanager --update [options]
[options]
參數(shù)列出了怎樣使用代理绩衷,強制使用http
的方法蹦魔,具體如下:
選項 | 描述 |
---|---|
--sdk_root=path | 指定sdk根目錄 |
--channel=channel_id | 指定更新頻道:0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary) |
--include_obsolete | 列出和更新包時是否包括已經(jīng)廢棄的包,和--list或--update同時使用 |
--no_https | 強制使用http |
--verbose | 詳細輸出模式:錯誤唇聘、警告和完整信息 |
--proxy={http | socks} | 代理方式用http或socks |
--proxy_host={IP_address | DNS_address} | 代理主機版姑,可以用IP地址,也可以用域名 |
--proxy_port=port_number | 代理端口 |
想給其他操作系統(tǒng)下載sdk迟郎,可以設置環(huán)境變量REPO_OS_OVERRIDE
剥险,值為windows
, macosx
, linux
使用代理g.cn:80
,并且用http
方式列出包信息:
sdkmanager --list --no_https --proxy=http --proxy_host=g.cn --proxy_port=80
為了防止每次都輸入一堆options
參數(shù)宪肖,寫個bat腳本(shell腳本類似)表制,叫smeasy.bat
吧健爬,內(nèi)容如下
@echo off
@rem %* 功能參數(shù),如:list update uninstall
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set SDK_MAN=%DIRNAME%sdkmanager.bat
set PARAM=
if "x%~1" == "x" goto execute
set PARAM=%*
:execute
%SDK_MAN% %PARAM% --no_https --proxy=http --proxy_host=g.cn --proxy_port=80
為了同步多臺機器的配置么介,最好寫個package_file
娜遵,創(chuàng)建一個叫pack.txt
的文件,里面填包名即可壤短,安裝時直接執(zhí)行
smeasy --package_file=pack.txt
使用--list
參數(shù)列出包名時设拟,會有這種為了表格輸出有省略號的時候
想列出完整包名,需要使用--verbose
參數(shù)久脯,修改腳本最后一句為:
%SDK_MAN% %PARAM% --no_https --proxy=http --proxy_host=g.cn --proxy_port=80 --verbose
這樣就能列出完整的包名了纳胧,如下圖
從圖中還能看到包之間有依賴關系,下載一個包時帘撰,其依賴的包也會被下載下來跑慕。
更新sdk tools
時,發(fā)現(xiàn)失敗摧找,日志如下:
經(jīng)過google
核行,stackoverflow
上已經(jīng)有解決辦法,需要使用--sdk_root
參數(shù)指定另外的sdk根目錄(里面需要先放一個sdk tools
)蹬耘,所以先copy一份sdk tools
到另一個目錄D:\android\sdk_temp
芝雪,然后把D:\android\sdk_temp\tools\bin\smeasy.bat
腳本最后一句改為:
set SDK_ROOT=D:\android\sdk
%SDK_MAN% %PARAM% --no_https --proxy=http --proxy_host=g.cn --proxy_port=80 --verbose --sdk_root=%SDK_ROOT%
至此,腳本完成综苔。
完整版smeasy.bat
腳本如下:
@echo off
@rem %* 功能參數(shù)绵脯,如:list update uninstall
set SDK_ROOT=D:\android\sdk
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set SDK_MAN=%DIRNAME%sdkmanager.bat
set PARAM=
if "x%~1" == "x" goto execute
set PARAM=%*
:execute
%SDK_MAN% %PARAM% --no_https --proxy=http --proxy_host=g.cn --proxy_port=80 --verbose --sdk_root=%SDK_ROOT%
對應的shell腳本smeasy.sh
如下:
#!/bin/bash
DIRNAME=$PWD
SDK_MAN=$DIRNAME/sdkmanager
SDK_ROOT=$HOME/android/sdk
PARAM=
if [ $# -gt 0 ]
then
PARAM=$*
fi
$SDK_MAN $PARAM --no_https --proxy=http --proxy_host=g.cn --proxy_port=80 --verbose --sdk_root=$SDK_ROOT
參考
sdk tools和studio下載地址:https://developer.android.com/studio/index.html#downloads
環(huán)境變量配置的變化:https://developer.android.com/studio/command-line/variables.html
sdkmanager配置說明:https://developer.android.com/studio/command-line/sdkmanager.html
sdk tools更新失敗解決辦法:https://stackoverflow.com/questions/43796568/cant-update-tools-android-sdk-command-line-tools-for-windows