使Android sdkmanager与Java 11一起运行

Man*_*ish 11 android java-11

我在sdkmanager使用Java 11 运行Android时遇到问题(不是Studio,只有SDK工具)。我不想安装JDK 8或类似的东西。有没有办法sdkmanager用JDK 11 修复这个问题?

我已经回答这个问题,但它不提供针对Java 11的命令行修复。还有其他解决方法吗?

Emi*_* M. 21

如果有人正在寻找Java 11上的Linux修复程序,那么我会根据Wang的答案来构建它

cd Android/tools/bin
mkdir jaxb_lib
wget http://central.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar -O jaxb_lib/activation.jar
wget http://central.maven.org/maven2/javax/xml/jaxb-impl/2.1/jaxb-impl-2.1.jar -O jaxb_lib/jaxb-impl.jar
wget http://central.maven.org/maven2/org/glassfish/jaxb/jaxb-xjc/2.3.2/jaxb-xjc-2.3.2.jar -O jaxb_lib/jaxb-xjc.jar
wget http://central.maven.org/maven2/org/glassfish/jaxb/jaxb-core/2.3.0.1/jaxb-core-2.3.0.1.jar -O jaxb_lib/jaxb-core.jar
wget http://central.maven.org/maven2/org/glassfish/jaxb/jaxb-jxc/2.3.2/jaxb-jxc-2.3.2.jar -O jaxb_lib/jaxb-jxc.jar
wget http://central.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar -O jaxb_lib/jaxb-api.jar
Run Code Online (Sandbox Code Playgroud)

下载完成后(确保所有文件都已下载确定),您必须编辑sdkmanager和avdmanager脚本。向下滚动到CLASSPATH变量,并添加我们刚刚下载的新jar,如下所示:

CLASSPATH=$APP_HOME/bin/jaxb_lib/activation.jar:$APP_HOME/bin/jaxb_lib/jaxb-impl.jar:$APP_HOME/bin/jaxb_lib/jaxb-xjc.jar:$APP_HOME/bin/jaxb_lib/jaxb-core.jar:$APP_HOME/bin/jaxb_lib/jaxb-jxc.jar:$APP_HOME/bin/jaxb_lib/jaxb-api.jar:<etc etc...DO NOT REMOVE THE OTHER JARS!...>
Run Code Online (Sandbox Code Playgroud)


小智 17

sdkmanager附带弃用的SDK工具包不支持JDK 8,不再接收更新自2017年九月更多的信息在这里这里

sdkmanager包括在新的命令行工具包支持JDK 11,它可以从Android Studio的下载页面下载,在命令行工具仅 部分。无需下载任何其他文件或使用sdkmanager脚本进行破解,但是您需要更新 PATH 设置,例如在 Linux 上:$ANDROID_HOME/cmdline-tools/latest/bin而不是$ANDROID_HOME/tools/bin

尽管已弃用,但默认情况下,旧的 Tools 包仍与 Android Studio 4.1.1 一起安装。这篇文章解释了原因。

  • 截至 2021 年 11 月,此建议似乎已过时。Android SDK 命令行工具的官方下载中没有“latest”文件夹,只有与 Java-11 不兼容的“sdkmanager”。 (3认同)
  • 这是 2021 年 3 月的正确答案。通常现在是 PATH 问题,新的命令行工具 (`$ANDROID_HOME/cmdline-tools/latest/bin`) 不在旧工具 (`$ANDROID_HOME/tools/) 之前的 PATH 中bin`),但要么直接引用它们,要么重新组织你的路径,你就拥有了现代的 JDK11 兼容的 sdkmanager。 (2认同)

小智 7

对于那些在 Travis CI 中看到此问题的人:我在尝试接受构建工具 30.0.2 的许可协议时看到了此错误,目标是 Android 30,使用 Java 11 进行 travis CI 构建。应用这个答案(/sf/answers/4604796241/)我最终得到了这个工作yml

os: linux
language: android
jdk: openjdk11

android:
 components:
   - tools
   - platform-tools
   - tools
   - extra-android-m2repository
env:
  global:
    - TARGET_VERSION=30
    - ANDROID_BUILD_TOOLS_VERSION=30.0.2
    - ANDROID_HOME=~/android-sdk

before_install:
  - touch $HOME/.android/repositories.cfg
  - wget "https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip" -O commandlinetools.zip
  - unzip commandlinetools.zip -d $ANDROID_HOME/
  - yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager "platforms;android-${TARGET_VERSION}" --sdk_root=$ANDROID_HOME
  - yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" --sdk_root=$ANDROID_HOME

before_script:
 - chmod +x gradlew
script:
- ./gradlew your_command_here
Run Code Online (Sandbox Code Playgroud)

  • android 组件下不需要工具和平台工具,因为您是手动获取它们。build-tools 也可以通过 Android Gradle 插件按需下载,因此 platform:android-30 是您需要的唯一组件。 (2认同)

小智 4

下载jxab和jaf,将它们全部放入classpath中。

例如

sdkmanager.bat

...
set CLASSPATH=%CLASSPATH%;mylib\jaxb-ri\lib\jaxb-api.jar
set CLASSPATH=%CLASSPATH%;mylib\jaxb-ri\lib\jaxb-core.jar
set CLASSPATH=%CLASSPATH%;mylib\jaxb-ri\lib\jaxb-impl.jar
set CLASSPATH=%CLASSPATH%;mylib\jaxb-ri\lib\jaxb-jxc.jar
set CLASSPATH=%CLASSPATH%;mylib\jaxb-ri\lib\jaxb-xjc.jar
set CLASSPATH=%CLASSPATH%;mylib\jaf-1.1.1\activation.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
...
Run Code Online (Sandbox Code Playgroud)