升级Java 11后Docker构建Android项目遇javax/xml/bind错误
解决方案
这个错误是因为Java 11移除了javax.xml.bind相关的JAXB模块,而你使用的旧版Android SDK Tools(sdk-tools-linux-4333796对应版本26.1.1)依赖该模块,导致运行sdkmanager时找不到类。以下是两种可行的解决方式:
方式一:升级到兼容Java 11的Android SDK Command-Line Tools
新版的Android SDK Command-Line Tools已经适配了Java 11,无需额外依赖JAXB。修改Dockerfile如下:
FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y openjdk-11-jdk wget unzip git dos2unix && \ rm -rf /var/lib/apt/lists/* ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ENV ANDROID_SDK_ROOT=/opt/android-sdk-linux # 下载新版Command-Line Tools(可替换为最新版本链接) RUN cd /opt && \ wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O android-sdk.zip && \ unzip -q android-sdk.zip -d android-sdk-linux && \ rm android-sdk.zip # 适配新版工具的路径结构 RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ mv ${ANDROID_SDK_ROOT}/android-sdk-linux/* ${ANDROID_SDK_ROOT}/cmdline-tools/latest/ && \ rm -rf ${ANDROID_SDK_ROOT}/android-sdk-linux # 更新环境变量 ENV PATH=${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools # 接受Android许可证 RUN yes | sdkmanager --licenses # 安装Android构建工具 RUN sdkmanager --update && \ sdkmanager "platform-tools" "platforms;android-28" "build-tools;28.0.3" "system-images;android-28;google_apis;x86_64" # 创建AVD RUN echo "no" | avdmanager create avd -n test -k "system-images;android-28;google_apis;x86_64" --force COPY . /app RUN dos2unix /app/gradlew WORKDIR /app
方式二:为旧版sdkmanager添加JAXB依赖参数
如果需要保留旧版SDK Tools,可以在调用sdkmanager时手动添加JAXB相关的模块依赖。修改Dockerfile中对应的命令行:
# 接受Android许可证(添加JAXB依赖参数) RUN yes | sdkmanager --licenses --add-modules java.xml.bind,java.activation # 安装Android构建工具(同样添加参数) RUN sdkmanager --update --add-modules java.xml.bind,java.activation && \ sdkmanager --add-modules java.xml.bind,java.activation "platform-tools" "platforms;android-28" "build-tools;28.0.3" "system-images;android-28;google_apis;x86_64"
说明
- 方式一为推荐方案,新版工具更适配Java 11及后续版本,且Google官方已停止维护旧版SDK Tools。
- 方式二仅作为临时兼容方案,旧版工具可能存在其他未适配Java 11的潜在问题。
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

