启用Jack时,Android项目无法编译

时间:2017-11-12 19:13:08

标签: android android-gradle build.gradle

启用插孔时出现以下错误

  

错误:Jar转换:来自不受支持的Java版本的类文件错误:任务执行失败   ':应用程序:transformClassesWithPreJackPackagedLibrariesForDebug&#39 ;.    com.android.build.api.transform.TransformException:com.android.builder.core.JackToolchain $ ToolchainException:Jack   编译异常

我的构建gradle

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'
}

Doe是否有这样的错误?它来自哪里?

1 个答案:

答案 0 :(得分:1)

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

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

如果您已经在使用Android Studio 3,则可以删除一般的插孔代码。这不是必需的。如果您使用的是较低版本,请升级然后删除插孔代码。

如果您阅读this

  

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

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