美文网首页
使用新版android sdk tool 的 sdkmanage

使用新版android sdk tool 的 sdkmanage

作者: zch4wb | 来源:发表于2017-07-31 20:14 被阅读7937次

    25.2.3+sdk tools中,不仅sdk的gui更新工具用不了,$ANDROID_SDK_ROOT/tools目录下的android.bat(Linux为shell)也变成了deprecated状态,官方推荐GUI界面使用studio集成管理器,命令行(使用场景:打包机或者CI系统中)界面使用$ANDROID_SDK_ROOT/tools/bin/sdkmanager.bat,参考官方文档,来自己尝试下。

    假设现在要在自己的开发机上新安装sdk,如果使用studio,则需要翻墙,无法使用g.cn:80代理来加快速度,或者干脆下载不了。

    从官方或者其他途径下载到sdk tools,官方下载界面如下

    sdk tools下载

    相应的,下载studio无sdk版本


    studio下载

    下载后解压到D:\android\sdk\tools,开始使用sdkmanager,加上help参数,列出使用方式

    cd D:\android\sdk\tools\bin
    sdkmanager --help
    

    基础用法如下:

    #列出已安装和可用的包(包括已安装的包)
    sdkmanager --list [options]
    #安装包
    sdkmanager packages [options]
    

    packages参数为用--list参数输出的可用的包的path,官方叫做SDK-style path,例如安装platform tools的方法:

    sdkmanager "platforms;android-26"
    

    如果要一次安装多个包,可以使用--package_file参数指定包名配置文本文件,如下:

    sdkmanager --package_file=package_file [options]
    

    package_file文件内容为SDK-style path,一行一个,没有双引号,例如:

    build-tools;23.0.1
    build-tools;23.0.2
    build-tools;23.0.3
    

    删除使用--uninstall参数,例如:

    sdkmanager --uninstall packages [options]
    sdkmanager --uninstall --package_file=package_file [options]
    

    更新已安装的包

    sdkmanager --update [options]
    

    [options]参数列出了怎样使用代理,强制使用http的方法,具体如下:

    选项 描述
    --sdk_root=path 指定sdk根目录
    --channel=channel_id 指定更新频道:0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary)
    --include_obsolete 列出和更新包时是否包括已经废弃的包,和--list或--update同时使用
    --no_https 强制使用http
    --verbose 详细输出模式:错误、警告和完整信息
    --proxy={http | socks} 代理方式用http或socks
    --proxy_host={IP_address | DNS_address} 代理主机,可以用IP地址,也可以用域名
    --proxy_port=port_number 代理端口

    想给其他操作系统下载sdk,可以设置环境变量REPO_OS_OVERRIDE,值为windows, macosx, linux

    使用代理g.cn:80,并且用http方式列出包信息:

    sdkmanager --list --no_https --proxy=http --proxy_host=g.cn --proxy_port=80
    

    为了防止每次都输入一堆options参数,写个bat脚本(shell脚本类似),叫smeasy.bat吧,内容如下

    @echo off
    @rem %* 功能参数,如: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,创建一个叫pack.txt的文件,里面填包名即可,安装时直接执行

    smeasy --package_file=pack.txt
    

    使用--list参数列出包名时,会有这种为了表格输出有省略号的时候

    list默认输出

    想列出完整包名,需要使用--verbose参数,修改脚本最后一句为:

    %SDK_MAN% %PARAM% --no_https --proxy=http --proxy_host=g.cn --proxy_port=80 --verbose
    

    这样就能列出完整的包名了,如下图


    完整包名

    从图中还能看到包之间有依赖关系,下载一个包时,其依赖的包也会被下载下来。

    更新sdk tools时,发现失败,日志如下:

    sdk tools更新失败

    经过googlestackoverflow上已经有解决办法,需要使用--sdk_root参数指定另外的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 %* 功能参数,如: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
    环境变量配置的变化: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

    相关文章

      网友评论

          本文标题:使用新版android sdk tool 的 sdkmanage

          本文链接:https://www.haomeiwen.com/subject/anorlxtx.html