赞
踩
本文为博主原创文章, 转载请注明: https://blog.csdn.net/u011339184/article/details/103787959
在使用 flutter doctor 时, 提示如下内容:
Android license status unknown.
Try re-installing or updating your Android SDK Manager.
查看资料发现需要先手动升级 SDKManager , 命令如下
XXX\Android\SDK\tools\bin\sdkmanager --update
但是由于当前的 java 环境是 JDK11 导致缺少部分依赖, 报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 more
网上查找的解决办法有两个,
JDK 降版本到 JDK8
虽然确实可行, 但是有些蠢.
项目中添加依赖
该方法适用于 java 项目中, 不能解决 SDKManager 升级报错的问题.
于是查看 SDK tools 中的脚本 sdkmanager.bat , 发现如下内容:
@rem Setup the command line
set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar
@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
脚本中调用了一些 tools 中自带的依赖, jar 包位于 XXX\Android\SDK\tools\lib 中, 于是在 tools 中创建新的目录 jre, 将前面执行 sdkmanager 命令报错所缺少的 jar 包放入其中:
activation-1.1.1.jar
jaxb-api-2.3.1.jar
jaxb-core-2.3.0.1.jar
jaxb-impl-2.3.2.jar
然后在 sdkmanager.bat 的 set CLASSPATH=
后面加入如下依赖:
;%APP_HOME%\jre\activation-1.1.1.jar;%APP_HOME%\jre\jaxb-api-2.3.1.jar;%APP_HOME%\jre\jaxb-core-2.3.0.1.jar;%APP_HOME%\jre\jaxb-impl-2.3.2.jar
再次执行
XXX\Android\SDK\tools\bin\sdkmanager --update
顺利升级成功.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。