java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException after updating to Android Studio 4.2

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException after updating to Android Studio 4.2

Google 刚刚发布 Android Studio 4.2 稳定版。我将我的 AS 从 4.1 更新到 4.2。 现在我收到这个错误。它显示数据绑定错误。

Caused by: java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
        at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1200)
        at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1233)
        at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1224)
        at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.doLoadProcessors(ProcessorLoader.kt:80)
        at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.loadProcessors(ProcessorLoader.kt:45)
        at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:42)
        ... 28 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
        ... 34 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
        ... 34 more

我有同样的问题,我已经解决了。我发现 Android studio 4.2 会将 JDK 更新为 Java11,这会导致您描述的错误。

您可以删除 Java11 JDK 并替换为 Java8 (/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home).

您也可以卸载 Android Studio,然后重新安装。

Android Studio 4.2.0 和更多现在随附 Java 11.0.8 发货并将默认情况下使用它,在不推荐使用的库中会出现此错误。

解决方法很简单,需要在菜单File > Project Structure > JDK Location[=12]中改成java(JDK)1.8 =]

注意到 Android 低于 4.2.0 的 Studio 已经带有 java 1.8

如果您使用的是 Ubuntu,那么只需在菜单文件 > 项目结构 > [=16= 中将 JDK 位置更改为 JAVA (JDK) 1.8 ] 地点

JDK location android studio 4.2

我以为是 jdk 路线,经过几个小时的搜索,这对我有用

distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip

在您的 build.gradle 文件中添加和更新 kotlin_version

ext.kotlin_version = '1.4.32'

 dependencies {
        classpath 'com.android.tools.build:gradle:4.2.1'
    }

如果您使用 enableAapt2,请将其从您的 gradle.properties 文件中移除

org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M"
#android.enableAapt2=false
android.useAndroidX=true
android.enableJetifier=true

有两种方法可以解决这个问题

  1. 回滚到 Java 8
  2. 更新 gradle 工具 'com.android.tools.build:gradle' 像 4.2.1(我用过) 也许你会遇到“Entry name 'AndroidManifest.xml' collided”的问题,在下面添加你的App build.gradle
android {
    packagingOptions {
        exclude 'AndroidManifest.xml'
    }
}

通过执行以下步骤,我解决了这个问题,而无需将 JDK 替换为 JAVA 8.

第 1 步:将 gradle-wrapper.properties

中的 distributionUrl 更新为 https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip

第 2 步:将您的 gradle 工具类路径更新为根 buid.gradle

中的 'com.android.tools.build:gradle:4.2.1'

如果你来这里有 Android Studio Arctic Fox,默认情况下 Java 11,你需要使用 java 1.8 找到必要的 类 已在 java 11 升级中完全删除。

在AndroidStudio Arctic Fox中设置的路径如下

首选项 > 构建执行部署 > Gradle > Gradle Sdk

选择下载 JDK,然后选择 Java 1.8.x 版本并重建项目。