在把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\
build-tools
cmdline-tools
licenses
platforms
%ANDROID_SDK_ROOT%文件夹
- cmdline-tools
- latest (听说也可以是version或者tools,未测试)
- bin
- sdkmanager.bat
- ...
- lib
- NOTICE.txt
- source.properties
- ...
commandlinetools-win-6514223_latest.zip
解压缩到相应目录,并按照上面的目录结构放置文件应该就没问题了。新建目录 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
参数的。
$ 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