当前位置:   article > 正文

JDK11 使用 sdkmanager --update 报错解决_sdktool jdk11

sdktool jdk11

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.
  • 1
  • 2

查看资料发现需要先手动升级 SDKManager , 命令如下

 XXX\Android\SDK\tools\bin\sdkmanager --update
  • 1

但是由于当前的 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

解决办法

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

  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%
  • 1
  • 2
  • 3
  • 4
  • 5

脚本中调用了一些 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
  • 1
  • 2
  • 3
  • 4

然后在 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
  • 1

再次执行

 XXX\Android\SDK\tools\bin\sdkmanager --update
  • 1

顺利升级成功.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/840806
推荐阅读
相关标签
  

闽ICP备14008679号