JDK11 使用 sdkmanager --update 报错解决

JDK11 使用 sdkmanager --update 报错解决

本文为博主原创文章, 转载请注明: 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

解决办法

网上查找的解决办法有两个,

  1. JDK 降版本到 JDK8
    虽然确实可行, 但是有些蠢.

  2. 项目中添加依赖
    该方法适用于 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.batset 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

顺利升级成功.

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值