java - Android 应用程序 + Java 模块 (Java 1.8)

标签 java android gradle lambda retrolambda

Android Project (gradle) 有主要的应用模块: app - android 应用程序(应用插件:'com.android.application') 和java模块: 网络 - (应用插件:'java')

java 模块 network 默认具有源代码兼容性 1.8,由于 lambda 表达式,我真的很想拥有它。

但 Android 应用程序默认为 1.7,我无法构建该应用程序。 当然,我在我的 app - android 模块中使用 retrolambda,但项目无法编译,因为:

错误:com.android.dx.cf.iface.ParseException:错误的类文件魔术(cafebabe)或版本(0034.0000)

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

如果我制作我的 java 模块,一切都会编译良好:

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

但在这种情况下,我不能使用 lambda 表达式,但我需要它。

我只看到下一个解决方案:

  1. 使 network 模块不是 java 而是 android-module 并使用 retrolambda (但是我打算从这个模块中生成 .jar 而不是 .aar,所以它必须是 Java)

  2. 不要在我的 java 模块(将来的 .jar)中使用 lambda 表达式(但是 我想使用它是因为 rxJava 中的愚蠢代码太匹配而没有 λ)

对我来说最好的解决方案是在我的 java 模块中使用类似 retrolambda 的东西。我尝试做类似的事情,但 retroambda 依赖项(应用插件:'me.tatarka.retrolambda')在编译期间没有受到影响错误。 或者可以将 java 1.7 与 retrolambda 之类的东西一起使用。 但是 gradle 文件没有 android {...} 部分来设置 compileOptions。

如何做到这一点?

最佳答案

基于我为 FunctionalIterables 所做的,您的 gradle 文件应如下所示:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.2.3'
    }
}

repositories {
    jcenter()
}

apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_6
}

(我的gradle文件的其余部分只与发布库有关)

Retrolambda 会做所有必要的事情来让你的输出 jar 以正确的 java 版本为目标。

关于java - Android 应用程序 + Java 模块 (Java 1.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997631/

相关文章:

java - 设置来自 Java 的 PostgreSQL JDBC 连接的连接选项

java - 错误:not a statement

android - 让 Android Studio、Gradle 和 Android Annotations 协同工作

gradle - 什么是Gradle中的文件分类器?

java - 在 mavenCentral 中发布时如何从 pom 中删除依赖项

Android studio 2.3生成aar而不是apk

java - 如何计算原始数据类型的范围?

java - android 不同宽度的边框

java - 定时器循环或替代方案?

Android Studio 3.0 Canary 1 注释处理器错误