android java1.8 编译,Android gradle编译使用java 1.8,jack和lambda失败(Android gradle compilation fails using j...

Android gradle编译使用java 1.8,jack和lambda失败(Android gradle compilation fails using java 1.8, jack and lambda)

我正在尝试在我的项目中使用java 8,但是当我使用lambda表达式时会出现一个未知问题。

异常: org.gradle.api.tasks.TaskExecutionException:任务':SLL:compileReleaseJavaWithJavac'的执行失败。

引起: org.gradle.api.internal.tasks.compile.CompilationFailedException:编译失败;

当我没有lambda运行时,我的项目没有错:

以下代码完美无缺

act.runOnUiThread(new Runnable() {

public void run() {

// Alert dialog here

}

});

但是使用lambda失败并抛出上面的异常

act.runOnUiThread(()->{

// Alert dialog here

});

的build.gradle

apply plugin: 'com.android.application'

android {

compileSdkVersion 25

buildToolsVersion "25.0.2"

defaultConfig {

applicationId "..."

minSdkVersion 16

targetSdkVersion 25

versionCode 1

versionName "1.0"

jackOptions {

enabled true

}

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

compileOptions {

targetCompatibility 1.8 // or JavaVersion.VERSION_1_8

sourceCompatibility 1.8

}

}

dependencies {

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

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:25.0.1'

}

我不知道发生了什么。

先感谢您!

I'm trying to use java 8 in my projects, but an unknown problem occurs when I use lambda expression.

Exception: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':SLL:compileReleaseJavaWithJavac'.

Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;

There is not wrong in my project when I run without lambda:

This code below work Perfectly

act.runOnUiThread(new Runnable() {

public void run() {

// Alert dialog here

}

});

But using lambda fails and throws the exception above

act.runOnUiThread(()->{

// Alert dialog here

});

build.gradle

apply plugin: 'com.android.application'

android {

compileSdkVersion 25

buildToolsVersion "25.0.2"

defaultConfig {

applicationId "..."

minSdkVersion 16

targetSdkVersion 25

versionCode 1

versionName "1.0"

jackOptions {

enabled true

}

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

compileOptions {

targetCompatibility 1.8 // or JavaVersion.VERSION_1_8

sourceCompatibility 1.8

}

}

dependencies {

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

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:25.0.1'

}

I have no idea what's happening.

Thank you in advance!

原文:https://stackoverflow.com/questions/41313050

更新时间:2020-07-09 16:07

最满意答案

我发现了一个临时解决方案,只有当我们在库中使用lambda时才会出现问题,因为它不支持插孔,只在主app中支持jack,我们在等待android允许libs启用jack,但在此之前,我们可以添加下面的代码到build.gradle库文件。

gradle.projectsEvaluated {

tasks.withType(JavaCompile) {

options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar"

}

}

该解决方案仅适用于我们自己的接口,其他类似Runnable会导致编译错误。

I found a temporary solution, the problem occurs only when we use lambda in libraries, becouse its not support jack, jack is supported only in the main app, we are waitting android allows libs to enable jack, but before that, we can add the code below to the build.gradle libraries file.

gradle.projectsEvaluated {

tasks.withType(JavaCompile) {

options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar"

}

}

That solution works only with the our own interfaces, others like Runnable causes compilation error.

2016-12-27

相关问答

只是为了回圈,并添加我所学到的东西。 通过将我的JAVA HOME的运行时jar添加到项目的build.gradle文件中的gradle的bootclasspath中,我能够通过MethodType not found错误。 allprojects {

gradle.projectsEvaluated {

tasks.withType(JavaCompile) {

options.compilerArgs << "-Xbootclasspat

...

有关使用Jack所需要的详细信息,以及如何在文档中找到。 以下是build.gradle关于如何使用jackOptions并为java 1.8设置compileOptions的文档的相关部分。 android {

...

defaultConfig {

...

jackOptions {

enabled true

}

}

compileOptions {

sourceCompa

...

步骤1:打开你的build.gradle (模块应用程序) 第2步:在android块下添加下面的行 android {

//.. other code

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}

}

第3步:同步项目或点击立即sync now (出现在右上角) 注意:如果

...

看起来多个库包含核心库文件; 当我制作一个示例案例时,我得到了一个略有不同的异常,但这是相同的原因。 如果我打开外部库选项卡来查看它正在使用的jar,我会看到spring-android-core和spring-core ,如果我打开它们以查看其中的类,我看到它们都包含org.springframework.core.ErrorCoded (在我的测试用例中是重复的类)。 你不是直接包括spring-core ; 它是来自spring-android-auth库的传递依赖(如果我只包含那两个库并省

...

杰克已弃用。 如果你想使用Java 8,你应该将Android Studio更新到3.0,主要是因为你不需要Jack将Java 8与Android Studio 3.0一起使用 杰克是有缺陷的,当我使用它时,我甚至无法编译它。 根据我的经验,整个事情是越野车。 Android Studio 3.0带有无需插口的Java 8支持,这意味着您无需处理它。 如果您已经在使用Android Studio 3,则可以删除一般的插孔代码。 这不是必需的。 如果您使用的是较低版本,请升级然后删除插孔代码。 如果

...

你在编译什么版本的Groovy(在你的依赖项中)? Groovy直到2.3才支持Java 8。 如果这没有解决它,并且它是一个更内部的Gradle问题(很难说你没有发布和示例构建脚本,或完整的例外),你可能需要升级到Gradle 2+,因为那是当他们迁移到Java 8支持版本的Groovy时。 What version of Groovy are you compiling with (in your dependencies)? Groovy doesn't support Java 8 unt

...

杰克仍然不支持所有java 8功能。 有关如何查看Java 8语言功能的信息 Android开发者 。 它已被弃用 : 我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。 所以不幸的是,现在编译Java 8库是不可能的 Jack still does not support all java 8 features. For a how-to see Java 8 Language Features | Android Developers. And

...

android-apt不支持Jack。 从Android Gradle插件版本2.2开始,我建议切换到也支持Jack的内置注释支持。 请参阅此简短指南,了解如何从android-apt迁移 。 android-apt does not support Jack. As of the Android Gradle plugin version 2.2 I recommend to switch to the built in annotation support that also supports

...

我已经解决了这个问题,那是因为我使用了jack和java 1.8。 从我的gradle(和我的应用程序中的lambda函数)中删除这些行后,崩溃消失了: jackOptions {

enabled true

}

...

compileOptions {

targetCompatibility 1.8

sourceCompatibility 1.8

}

谢谢您的帮助! I have solved the problem, it was because I used jack

...

我发现了一个临时解决方案,只有当我们在库中使用lambda时才会出现问题,因为它不支持插孔,只在主app中支持jack,我们在等待android允许libs启用jack,但在此之前,我们可以添加下面的代码到build.gradle库文件。 gradle.projectsEvaluated {

tasks.withType(JavaCompile) {

options.compilerArgs << "-Xbootclasspath/a:" + System.properti

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值