Android SDK Command line tools运行sdkmanager报告Warning: Could not create settings错误信息解决方法

目录

    • 问题
    • 研究
    • 解决方案
    • 参考资料

问题

在把kivy的python程序打包为apk的过程中,接触到了Android SDK的Command line tools。我的理解是,不安装Android Studio的情况下,Android SDK的Command line tools可以使用命令行的方式下载、安装和运行Android SDK相关的一切。

下面链接可以下载各个操作系统平台对应的Android SDK Command line tools:
https://developer.android.google.cn/studio?hl=zh-cn#downloads

然而,我在下载解压缩后,运行sdkmanager却会报错 Warning: Could not create settings

C:\androidsdk\tools\bin $ sdkmanager --version
Warning: Could not create settings
java.lang.IllegalArgumentException
        at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.(SdkManagerCliSettings.java:428)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Usage:
  sdkmanager [--uninstall] [] [--package_file=] [...]
  sdkmanager --update []
  sdkmanager --list []
  sdkmanager --licenses []
  sdkmanager --version

With --install (optional), install ......
.
.
.

即使我设置了ANDROID_SDK_ROOT环境变量,也把sdkmanager所在目录加入PATH,仍然会报同样的错误。

后来在网上查到可以加上--sdk_root=...参数即可解决问题。

C:\androidsdk\tools\bin $ sdkmanager --sdk_root=c:\androidsdk --version
4.0.0

但是我觉得这并不是一个彻底的解决方案,而且每次执行sdkmanager都要加--sdk_root也比较麻烦。

研究

在研究了一番Android SDK的目录结构之后,我发现如下几点。

  • 环境变量ANDROID_SDK_ROOT需要设为Android SDK所在目录,例如:
$ set ANDROID_SDK_ROOT=C:\Android\sdk\
  • 然后%ANDROID_SDK_ROOT%指向的文件夹下,放置的是Android SDK相关组件所在的文件夹,例如:
build-tools
cmdline-tools
licenses
platforms
  • 而Command line tools所在的目录结构应该是这样的:
    %ANDROID_SDK_ROOT%文件夹
        - cmdline-tools
            - latest			(听说也可以是version或者tools,未测试)
                - bin
                    - sdkmanager.bat
                    - ...
                - lib
                - NOTICE.txt
                - source.properties
                - ...
  • 那么我们把下载的commandlinetools-win-6514223_latest.zip解压缩到相应目录,并按照上面的目录结构放置文件应该就没问题了。
    又或者是利用sdkmanager来建立这个目录结构,也正是我下面采用的方法。

解决方案

  • 新建目录 c:\Android\SDK

  • 下载commandlinetools-win-6514223_latest.zip

  • 随便解压到一个目录,比如c:\androidsdk

  • 用解压缩得到的sdkmanager下载、安装cmdline-tools(是的你没看错,我又要下载一遍cmdline-tools,为的是用sdkmanager建立的目录结构是最官方的)

$ cd c:\androidsdk\tools\bin
$ sdkmanager --sdk_root=c:\androidsdk "cmdline-tools;latest"

输入y回车,确认许可协议。

注意这里还是需要用--sdk_root参数的。

  • 上述命令完成后,cmdline-tools的目录结构应该就完成了
$ dir c:\Android\SDK\cmdline-tools\latest
 Volume in drive C is TEST
 Volume Serial Number is 0000-0000

 Directory of c:\Android\SDK\cmdline-tools\latest

2020/06/14  11:43              .
2020/06/14  11:43              ..
2020/06/14  11:43              bin
2020/06/14  11:43              lib
2020/06/14  11:43            85,112 NOTICE.txt
2020/06/14  11:43            17,785 package.xml
2020/06/14  11:43                84 source.properties
               3 File(s)        102,981 bytes
               4 Dir(s)  7,293,352,960 bytes free
  • 设置环境变量
    设置环境变量的系统变量,增加一个ANDROID_SDK_ROOT,设置为C:\Android\SDK
    设置环境变量的用户变量,在PATH列表中增加一个%ANDROID_SDK_ROOT%\cmdline-tools\latest\bin
    确定以保存设置。

  • 好了,现在可以关掉命令提示符,删除之前下载的commandlinetools-win-6514223_latest.zip文件解压缩的文件夹C:\androidsdk,再重新打开命令提示符

  • 试试运行sdkmanager

$ sdkmanager --version
4.0.0

这时不需要用--sdk_root参数了。

  • 然后再试试安装"platforms;android-27""build-tools;29.0.0"
$ sdkmanager "platforms;android-27" "build-tools;29.0.0"
[=======================================] 100% Unzipping... android-8.1.0/build.
  • %ANDROID_SDK_ROOT%\platform-tools%ANDROID_SDK_ROOT%\tools加入PATH

  • 一切OK!

  • 上述过程在Windows 10 企业版操作系统下完成。 Linux操作系统下的步骤类似。

参考资料

https://stackoverflow.com/questions/60440509/android-command-line-tools-sdkmanager-always-shows-warning-could-not-create-se
https://developer.android.google.cn/studio/command-line/variables?hl=zh-cn
https://developer.android.google.cn/studio/command-line?hl=zh-cn

你可能感兴趣的:(android,linux,android,studio)