Android应用构建失败:JAXBContext为空引发createUnmarshaller()调用异常
解决Android构建时"Cannot invoke javax.xml.bind.JAXBContext.createUnmarshaller() because 'context' is null"错误
错误日志
FAILURE: Build failed with an exception. * What went wrong: Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'. > Cannot invoke "javax.xml.bind.JAXBContext.createUnmarshaller()" because "context" is null * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 2s
问题原因
这个错误核心是Java版本与Gradle/Android Gradle Plugin(AGP)兼容性不匹配。JAXB属于Java EE API,在Java 9及以上版本中被移出默认类路径,若项目使用的JDK版本过高,或AGP版本与JDK版本不兼容,就会触发该异常。
解决方案
指定项目使用Java 8
在项目根目录的build.gradle(项目级)中添加JDK工具链配置:plugins { id 'com.android.application' version '你的AGP版本' apply false id 'com.android.library' version '你的AGP版本' apply false } java { toolchain { languageVersion = JavaLanguageVersion.of(8) } }或者在
gradle.properties文件中直接指定JDK 8路径:org.gradle.java.home=/你的JDK8安装路径匹配AGP与JDK版本
若你升级过AGP版本,尝试降级到与Java 8兼容的稳定版本(比如7.4.x系列),修改项目级build.gradle:plugins { id 'com.android.application' version '7.4.2' apply false }清理Gradle缓存
执行命令清除缓存并刷新依赖,避免缓存异常:./gradlew clean build --refresh-dependencies检查模块编译配置
在模块级build.gradle中确保编译选项指定Java 8:android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // 若使用Kotlin,添加以下配置 kotlinOptions { jvmTarget = '1.8' } }
补充说明
新项目初始能构建,后续出错的常见原因:后续修改了本地JDK默认版本、升级了AGP/Gradle版本,或是引入的第三方依赖间接触发了版本兼容问题。
内容的提问来源于stack exchange,提问作者Daniel Omotoso
相关产品推荐
相关产品推荐

