启用插孔时出现以下错误
错误: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是否有这样的错误?它来自哪里?
答案 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的最佳选择