【问题标题】:Android project does not compile when Jack is enable启用 Jack 时,Android 项目无法编译
【发布时间】:2025-12-06 02:45:02
【问题描述】:

启用插孔时出现以下错误

错误:Jar 转换:来自不受支持的 Java 版本的类文件错误:任务执行失败 ':app:transformClassesWithPreJackPackagedLibrariesForDebug'。 com.android.build.api.transform.TransformException:com.android.builder.core.JackToolchain$ToolchainException:杰克 编译异常

我的构建等级

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "pl.develhopper.jaxygenaddclientlib"
        minSdkVersion 26
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        useLibrary 'org.apache.http.legacy'
        jackOptions { // DEPRECATED
        enabled true
        }

    }
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8

    }
}

dependencies {

compile fileTree(include: ['*.jar'], dir: 'libs')

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.code.gson:gson:2.8.2'
compile 'javax.xml.bind:jaxb-api:2.3.0'

testCompile 'junit:junit:4.12'
}

有人遇到过这样的错误吗?它来自哪里?

【问题讨论】:

  • Jack 编译无论如何都被弃用了
  • 还有其他选项可以使用 java 8 运行 android 项目吗?因为如果我将 target 和 sourceCompatibility 设置为 1.8,我会收到此错误 Error:Jack is required to support java 8 language features。启用 Jack 或删除 sourceCompatibility JavaVersion.VERSION_1_8。

标签: android android-gradle-plugin build.gradle


【解决方案1】:

Jack 已被弃用。如果你想使用 Java 8,你应该将 Android Studio 更新到 3.0,主要是因为你不需要 Jack 在 Android Studio 3.0 中使用 Java 8

Jack 有缺陷,我使用它时甚至无法编译。根据我的经验,整个事情都是错误的。 Android Studio 3.0 在没有 Jack 的情况下支持 Java 8,这意味着您不需要处理它。

如果您已经在使用 Android Studio 3,则通常只需删除插孔代码即可。它不是必需的。如果您使用的是较低版本,请升级然后删除插孔代码。

如果你读到this:

Android Studio 为使用某些 Java 8 语言功能和使用它们的第三方库提供内置支持。如图 1 所示,默认工具链通过对 javac 编译器的输出执行字节码转换(称为 desugar)来实现新的语言功能。不再支持 Jack,您应该首先禁用 Jack 以使用默认工具链中内置的 Java 8 支持。

您会看到 AS 3(网站开头引用的版本,为简洁起见,未包含在此答案中)支持不带 jack 的 Java 8。而且由于 jack 已被弃用并且(根据我的经验)存在错误,升级是获得 Java 8 的最佳选择

【讨论】: